找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2234|回复: 1
打印 上一主题 下一主题
收起左侧

mk7a11p单片机的电子壶源程序

[复制链接]
跳转到指定楼层
楼主
mk7a11p mcu的电子壶源程序 供大家参考


单片机源程序如下:
  1. #include  "mk7a11p.inc"  ;编译该文档需包含"mk7a11p.inc"文件
  2. ;------------------------------------------------------------------
  3. ;芯片型号(mk7a11p)
  4. ;------------------------------------------------------------------
  5. ;配置寄存器设置说明(CONFIG)
  6. ;1-----------FOSC=RC    ;LS,NS,HS,RC
  7. ;2-----------INRC=ON    ;ON,OFF
  8. ;3-----------CPT=OFF    ;ON,OFF
  9. ;4-----------WDTE=Disable   ;Enable,Disable
  10. ;5-----------LV=Low Vol Reset ON  ;Low Vol Reset ON,Low Vol Reset OFF
  11. ;6-----------RESET=...input...   ;...input...,...reset...
  12. ;------------------------------------------------------------------
  13. a_buf           equ                   0x20                   ;acc缓存器
  14. status_buf          equ                   0x21                   ;status缓存器
  15. tm_r                   equ                   0x22                   ;1s计时
  16. pb_buf          equ                  0x23         ;端口缓存
  17. del_r0               equ                   0x24         ;延时计数
  18. del_r1                equ                  0x25         ;延时计数
  19. gs_flag         equ             0x26        ;高水位标志
  20. cs_flag         equ             0x27        ;常水位标志
  21. ns_flag         equ             0x28        ;浓缩位标志
  22. fmq_flag        equ             0x29        ;蜂鸣器标志位
  23. ct1_flag        equ            0x2A        ;加热次数标志
  24. ct2_flag        equ            0x2B        ;加热次数标志
  25. ct3_flag        equ            0x2C        ;加热次数标志
  26. grcs_flag        equ            0x2e        ;加热次数标志
  27. grcs0_flag        equ            0x2e        ;加热次数标志
  28. ;------------------------------------------------------------------
  29.                    org                   0x3fe           ;mk7a11p的中断向量地址定义
  30.                      lgoto                 int                   ;跳转到中断程序入口
  31.                       org                0x3ff           ;mk7a11p的复位向量地址定义
  32.                      lgoto                main                   ;跳转到主程序入口
  33. ;------------------------------------------------------------------
  34.                     org                   0x000
  35. int                                                 ;中断入口地址
  36.                                                  ;保护现场
  37.                    movam                  a_buf
  38.                    swap                   status,a
  39.                    movam                  status_buf
  40.                    ;---------------------------------------------------------------
  41.                    btsc                   irqf,tm0f          ;判断是不是tmr0溢出中断
  42.                    lgoto           int_tm0          ;进入tmr0中断服务程序
  43.                    ;---------------------------------------------------------------
  44. int_end
  45.                                                    ;中断结束要恢复现场
  46.                    swap                   status_buf,a
  47.                    movam                  status
  48.                    swap                   a_buf,m          ;这里不能用"mov a_buf,a"因为
  49.                    swap                   a_buf,a          ;"mov a_buf,a"会影响status
  50.                    reti
  51. ;------------------------------------------------------------------
  52. int_tm0                                                ;tmr0中断服务程序
  53.                    bc                   irqf,tm0f          ;清除tmr0中断标志
  54.                    ;---------------------------------------------------------------
  55.                    inc                   tm_r,m
  56.                    movla                  .1                   ;4x250=1s
  57.                    xor                   tm_r,a
  58.                    btss                   status,z        ;逻辑结果操作结果零标记位
  59.                    lgoto           int_end
  60.                    clr                   tm_r
  61.                    ;---------------------------------------------------------------
  62.                    movla                  b'00100000'
  63.                    xor                   portb,m                ;PA0的High Low切换
  64.                    lgoto           int_end
  65. ;------------------------------------------------------------------
  66. delay
  67.                 decsz del_r0,m ;延时消抖
  68.                 lgoto delay
  69.                 movla                  .255
  70.                      movam                  del_r0
  71.                 decsz del_r1,m
  72.                 lgoto delay
  73.                 ret                              ;子程序返回
  74. main                                            ;主程序入口地址定义
  75.                    ;PortA端口方向及状态设定
  76.                     movla              b'11110000'
  77.                  iodir                 porta
  78.                     clr                   porta
  79.                   clr                  pa_pdm
  80.                     ;------------------------------------------------------
  81.                       ;PortB端口方向及状态设定pb2高水位键盘和绿灯控制
  82.                   movla                b'11001001';六个键 PB0 PB3设置为输入
  83.                     iodir                  portb
  84.                     clr                   portb
  85.                     clr                  pb_pod      ;lou ji kai lu
  86.                    clr                  pb_pdm     ;gong neng xuan ze
  87.                    clr                 pb_pup     ;shang la dian zu qi
  88.                 bs              pb_pup, 0
  89.                 ;bs              pb_pup, 3
  90.                        ;------------------------------------------------------初始化
  91.                 movla                         .0
  92.                 MOVAM            a_buf
  93.                  movla                  .0
  94.                 MOVAM            status_buf
  95.                  movla                  .0
  96.                 MOVAM            tm_r
  97.                  movla                  .0
  98.                 MOVAM            pb_buf
  99.                 movla                         .0
  100.                 MOVAM            gs_flag
  101.                  movla                  .0
  102.                 MOVAM            cs_flag
  103.                  movla                  .0
  104.                 MOVAM            ns_flag
  105.                  movla                  .0
  106.                 MOVAM            fmq_flag
  107.                 movla                         .0
  108.                 MOVAM            ct1_flag
  109.                  movla                  .0
  110.                 MOVAM            ct2_flag
  111.                  movla                  .0
  112.                 MOVAM            ct3_flag
  113.                  movla                  .0
  114.                  MOVAM           grcs_flag
  115.                  movla                  .0
  116.                  MOVAM           grcs0_flag

  117.                  ;bs              pb_pup, 3
  118.               ; movla                  b'00000001'
  119.                  ;        xor                   portb,m                ;PA0的High Low切换
  120.                        ;----------------------------------------------------------
  121.                    ;PortB端口8个IO唤醒使能
  122.                      ;movla          b'11111111'
  123.                     ;movam          wake_up
  124.                       ;---------------------------------------------------
  125.                     ;配置TMR0,预分频比为1:16
  126.                     ;TMR0初始值为250
  127.                      movla              b'11000011'
  128.                     select
  129.                        movla                  .12
  130.                      movam                  tmr0                   ;tmr0的溢出时间是:250x16=4ms
  131.                       ;---------------------------------------------------
  132.                    ;tmr0中断使能
  133.                
  134.                      ;inc                   del_r0,m                  ;tmr0的溢出时间是:250x16=4ms
  135.                      movla                  .255
  136.                      movam                  del_r0
  137.                      movla                  .255
  138.                      movam                  del_r1
  139.                   ;--------------------------------------延时一段时间等待电路稳定
  140.                 lcall           delay
  141.                   lcall           delay
  142.                     lcall           delay
  143.    ;                   lcall           delay
  144.    ;                     lcall           delay
  145. ;--------------------------------------——————第一次读取按键;

  146. duqu1
  147.                movla                b'11001101'      ;六个键 PB0 PB3设置为输入
  148.                iodir                  portb            ; pb2 设 置为输入
  149.                mov                   portb,a           ;读取端口状态
  150.                movam                  pb_buf           ;保存端口状态
  151.                COM              pb_buf, m       ;取反端口状态
  152.                lgoto            qu01_flag        ;延时状态
  153. yqu0
  154.                movla                b'11001101'      ;六个键 PB0 PB3设置为输入
  155.                iodir                  portb            ; pb2 设 置为输入
  156.                mov                   portb,a           ;二次读取端口状态
  157.                AND              pb_buf, m
  158.                BTSc                   pb_buf,2        ;测试pb2 为5零sikp高水位测试位
  159.                lgoto            qingchu
  160.                BTSc                   pb_buf,3        ;测试pb2 为5零sikp高水位测试位
  161.                lgoto            qingchu
  162.                movam                  pb_buf          ;一次测试pb0通过 。
  163.                inc              grcs0_flag,m
  164.                BTSs                   grcs0_flag,7     ;八次测试pb0通过 。
  165.                lgoto            duqu1
  166.                BTSs                   grcs0_flag,6     ;八次测试pb0通过 。
  167.                lgoto            duqu1
  168.                BTSs                   grcs0_flag,5     ;八次测试pb0通过 。
  169.                lgoto            duqu1
  170.                BTSc                    pb_buf,2
  171.                lgoto            sns_flag
  172.                lgoto            sgs_flag
  173. qu01_flag
  174.                movla                    .200
  175.                MOVAM            fmq_flag
  176. qu011_flag
  177.                movla                b'11001001'      ;六个键 PB0 PB3设置为输入
  178.                iodir                  portb            ; pb2 设 置为输入
  179.                bc               portb, 2        ;绿色指示灯亮
  180.                nop
  181.                nop
  182.                nop
  183.                nop
  184.                nop
  185.                nop
  186.                nop
  187.                nop
  188.                nop
  189.                nop
  190.                nop
  191.                nop
  192.                nop
  193.                nop
  194.                nop
  195.                nop
  196.                nop
  197.                nop
  198.                nop
  199.                nop
  200.                DECSZ          fmq_flag, m
  201.                lgoto           qu011_flag
  202.                lgoto            yqu0            ;
  203. qingchu
  204.                movla                  .0
  205.                MOVAM           grcs0_flag
  206.                lgoto            duqu1

  207.               
  208. sgs_flag
  209.                movla                  .1
  210.                MOVAM            gs_flag
  211.                lgoto            jiare_flag      ;只可能一个键被按下检测到后直接跳转加热
  212. sns_flag
  213.                BTSc                   pb_buf,3       ;测试pb3 为零sikp
  214.                lgoto            scs_flag
  215.                movla                  .1
  216.                MOVAM            ns_flag
  217.                lgoto            jiare_flag      ;只可能一个键被按下检测到后直接跳转加热
  218. scs_flag       movla                  .1
  219.                MOVAM            cs_flag
  220. ;----------------------------------------------------------------电路全功率加热
  221. jiare_flag
  222.                 bc              portb, 4        ;红色指示灯亮,
  223.                 movla                  b'10000001'
  224.                movam                  irqm
  225.                clr                 irqf
  226.                 ;bs              portb, 5 ;打开蜂鸣器
  227.                 movla                  .5
  228.                      movam                  del_r1
  229.                 lcall           delay          ;蜂鸣器响一声,
  230.                 ;lcall           delay          ;蜂鸣器响一声,
  231.                   lcall           delay          ;蜂鸣器响一声,
  232.                     lcall           delay          ;蜂鸣器响一声,
  233.                 movla                  b'00000000'
  234.                movam                  irqm
  235.                clr                 irqf
  236.                 ;bc              portb, 5    ;关闭蜂鸣器
  237.                
  238.                 bs              portb, 1       ;继电器打开全功率加热。
  239.                 bs              portb, 0
  240.               ;  bs              portb, 0       ;继电器打开全功率加热。
  241.                

  242.                
  243. jiare
  244.                 mov                   portb,a           ;读取端口状态
  245.                     movam                  pb_buf           ;保存端口状态
  246.                 btss                   pb_buf,0        ;测试pb0
  247.                       lgoto           jiare           ;等待温控器信号为零时跳出循环体
  248.                       nop
  249.                        bc              portb, 4        ;红色指示灯亮,
  250.                 nop
  251.                 nop
  252.                 nop
  253.                 nop
  254.                 nop
  255.                 nop
  256.                 nop
  257.                 btss                   pb_buf,0        ;测试pb0
  258.                 lgoto           jiare           ;等待温控器信号为零时跳出循环体
  259.                        nop
  260.                 nop
  261.                 nop
  262.                 nop
  263.                 lcall           delay
  264.                 nop
  265.                 nop
  266.                 nop
  267.                 nop
  268.                 btss                   pb_buf,0        ;测试pb0
  269.                 lgoto           jiare           ;等待温控器信号为零时跳出循环体
  270.                 nop
  271.                 nop
  272.                 nop
  273.                 nop
  274.                 nop
  275.                 nop
  276.                 nop
  277.                 nop
  278.                 btss                   pb_buf,0        ;测试pb0
  279.                 lgoto           jiare           ;等待温控器信号为零时跳出循环体


  280. ;------------------------------------------------------------加热完成延时加热;

  281.                BTSc                   gs_flag,0            ;为一表示高电平没有按键,跳过指令
  282.                lgoto            wcjiare1              ;高水位加热后直接完成加热状态
  283.                BTSc                   cs_flag,0
  284.                lgoto            csjiare_flag       ;常水位加热后延时2分钟
  285.                BTSc                  ns_flag,0
  286.                lgoto            nsjiare1_flag      ;浓缩水位加热后延时6分钟
  287. csjiare_flag
  288.                movla                  .121
  289.                MOVAM            fmq_flag
  290. csjiare1_flag
  291.                    lcall           delay
  292.                   lcall           delay
  293.                   lcall           delay
  294.                   lcall           delay
  295.                   lcall           delay
  296.                 DECSZ    fmq_flag, m
  297.                 LGOTO    csjiare1_flag
  298.                 LGOTO    wcjiare1
  299. nsjiare1_flag
  300.                movla                  .180
  301.                MOVAM            fmq_flag
  302. nsjiare11_flag
  303.                 lcall           delay
  304.                   lcall           delay
  305.                     lcall           delay
  306.                       lcall           delay
  307.                        lcall           delay
  308.                 DECSZ    fmq_flag, m
  309.                 LGOTO    nsjiare11_flag
  310. nsjiare2_flag
  311.                movla                  .180
  312.                MOVAM            fmq_flag
  313. nsjiare22_flag
  314.                 lcall           delay
  315.                   lcall           delay
  316.                     lcall           delay
  317.                       lcall           delay
  318.                         lcall           delay
  319.                DECSZ            fmq_flag, m
  320.                LGOTO            nsjiare22_flag
  321. wcjiare1
  322.                movla                b'11001001';六个键 PB0 PB3设置为输入
  323.                iodir                  portb      ; pb2 设 置为输出
  324.                 bs              portb, 4        ;红色指示灯灭,
  325.                 bc              portb, 1       ;关闭继电器打开全功率加热。
  326.                 bs              portb, 2        ;绿色指示灯亮
  327.                movla                  .10             ;蜂鸣器响十声,
  328.                MOVAM            fmq_flag
  329. sss1_flag
  330.                movla                  b'10000001'
  331.                movam                  irqm
  332.                clr                 irqf
  333.                lcall           delay
  334.                lcall           delay
  335.                movla                  b'00000000'
  336.                movam                  irqm
  337.                clr                 irqf
  338.                lcall           delay
  339.                lcall           delay
  340.                DECSZ           fmq_flag, m
  341.                LGOTO           sss1_flag
  342.                bc              portb, 5        ;关蜂鸣器,
  343. ;----------------------------------------------------------加热延时完成关闭加热;
  344. ;----------------------------------------------------------加热完成二次读取按键;
  345. baowen
  346.                movla                b'11001101'      ;六个键 PB0 PB3设置为输入
  347.                iodir                  portb            ; pb2 设 置为输入
  348.                mov                   portb,a           ;读取端口状态
  349.                movam                  pb_buf           ;保存端口状态
  350.                COM              pb_buf, m       ;取反端口状态
  351.                lgoto            qu1_flag        ;延时状态
  352. yqu
  353.                movla                b'11001101'      ;六个键 PB0 PB3设置为输入
  354.                iodir                  portb            ; pb2 设 置为输入
  355.                mov                   portb,a           ;二次读取端口状态
  356.                AND              pb_buf, m
  357.                BTSc                   pb_buf,2        ;测试pb2 为5零sikp高水位测试位
  358.                lgoto            qingchu0
  359.                BTSc                   pb_buf,3        ;测试pb2 为5零sikp高水位测试位
  360.                lgoto            qingchu0
  361.                movam                  pb_buf          ;一次测试pb0通过 。
  362.                inc              grcs_flag,m
  363.                BTSs                   grcs_flag,7     ;八次测试pb0通过 。
  364.                lgoto            baowen
  365.                BTSc                   pb_buf,2
  366.                lgoto            sns1_flag
  367.                lgoto            jiare2
  368. qu1_flag
  369.                movla                  .100
  370.                MOVAM            fmq_flag
  371. qu11_flag
  372.                movla                b'11001001'      ;六个键 PB0 PB3设置为输入
  373.                iodir                  portb            ; pb2 设 置为输入
  374.                bs              portb, 2        ;绿色指示灯亮
  375.                nop
  376.                nop
  377.                nop
  378.                nop
  379.                nop  
  380.                nop   
  381.                nop
  382.                nop
  383.                nop
  384.                nop
  385.                DECSZ          fmq_flag, m
  386.                lgoto           qu11_flag
  387.                lgoto            yqu            ;
  388. qingchu0
  389.                movla                  .0
  390.                MOVAM           grcs_flag
  391.                lgoto            baowen

  392. sns1_flag
  393.                BTSc                   pb_buf,3       ;测试pb3 为零sikp浓缩水位测试位
  394.                lgoto            scs1_flag      ;不是高水位也不是浓缩水位
  395.                BTSc                   gs_flag,0      ;是浓缩水位,
  396.                lgoto            sss_flag       ;高水位转浓缩水位,转加热6分钟
  397.                BTSc                   cs_flag,0       ;是浓缩不是高水位
  398.                lgoto             loop3       ;常水位转浓缩水位,加热四分钟
  399.                lgoto             jiare2        ;是浓缩水位,不是高水位,也不是常水位转保温加热
  400. scs1_flag                                      ;二次读取为常水位。
  401.                BTSc                  gs_flag,0
  402.                lgoto            loop           ;高水位转常水位 加热两分钟
  403.                lgoto            jiare2        ;不是高水位转常水位转到保温加热。
  404. loop
  405.                 BTSc                  ct1_flag,0
  406.                 lgoto            jiare2
  407.                 inc                   ct1_flag,m
  408.                 movla                b'11001001'      ;六个键 PB0 PB3设置为输入
  409.                iodir                  portb            ; pb2 设 置为输入
  410.                 bc              portb, 2        ;绿色指示灯亮
  411.                 bc              portb, 4        ;红色指示灯亮,
  412.                 bs              portb, 1       ;继电器打开全功率加热。
  413.                movla                  .120
  414.                MOVAM            fmq_flag
  415. nsjiare44_flag                                ;延时
  416.                  lcall           delay
  417.                   lcall           delay
  418.                     lcall           delay
  419.                       lcall           delay
  420.                         lcall           delay
  421.                 DECSZ          fmq_flag, m
  422.                 LGOTO        nsjiare44_flag
  423.                 lgoto           wcjiare1          ;延时加热后转保温加热
  424. sss_flag
  425.                 BTSc                  ct2_flag,0
  426.                 lgoto            jiare2
  427.                 BTSc                  ct1_flag,0
  428.                 lgoto         nsjiare045_flag
  429.                 inc                   ct2_flag,m
  430.                 movla                b'11001001'      ;六个键 PB0 PB3设置为输入
  431.                 iodir                  portb            ; pb2 设 置为输入
  432.                 bc              portb, 2        ;绿色指示灯亮
  433.                 bc              portb, 4        ;红色指示灯亮,
  434.                 bs              portb, 1       ;继电器打开全功率加热。
  435.                movla                  .120
  436.                MOVAM            fmq_flag
  437. nsjiare45_flag                                ;延时
  438.                  lcall           delay
  439.                   lcall           delay
  440.                     lcall           delay
  441.                       lcall           delay
  442.                         lcall           delay
  443.                 DECSZ    fmq_flag, m
  444.                 LGOTO    nsjiare45_flag
  445. nsjiare045_flag
  446.                inc                  ct2_flag,m
  447.                bc             portb, 2        ;绿色指示灯灭
  448.                bc              portb, 4        ;红色指示灯亮,
  449.                bs              portb, 1       ;继电器打开全功率加热。
  450.                 movla                  .230
  451.                 MOVAM            fmq_flag
  452. nsjiare46_flag                                ;延时
  453.                 lcall           delay
  454.                   lcall           delay
  455.                     lcall           delay
  456.                       lcall           delay
  457.                        lcall           delay
  458.                 DECSZ    fmq_flag, m
  459.                 LGOTO    nsjiare46_flag
  460.                 lgoto            wcjiare1         ;延时六分钟加热后转保温加热
  461. loop3
  462.                BTSc                  ct3_flag,0
  463.                lgoto            jiare2
  464.                inc                   ct3_flag,m
  465.                 movla                b'11001001'      ;六个键 PB0 PB3设置为输入
  466.                iodir                  portb            ; pb2 设 置为输入
  467.                 bc              portb, 2        ;绿色指示灯亮
  468.                bc              portb, 4        ;红色指示灯亮,
  469.                bs              portb, 1       ;继电器打开全功率加热。
  470.                 movla                  .240
  471.                 MOVAM            fmq_flag
  472. nsjiare47_flag                                ;延时
  473.                  lcall           delay
  474.                  lcall           delay
  475.                     lcall           delay
  476.                       lcall           delay
  477.                         lcall           delay
  478. ……………………

  479. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
14 6A12_dzkwh.rar (15.45 KB, 下载次数: 5)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:415435 发表于 2019-8-31 23:40 | 只看该作者
没有电路图吗?大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表