标题:
mk7a11p单片机的电子壶源程序
[打印本页]
作者:
xitaopeng
时间:
2018-7-8 22:13
标题:
mk7a11p单片机的电子壶源程序
mk7a11p mcu的电子壶源程序 供大家参考
0.png
(44.38 KB, 下载次数: 67)
下载附件
2018-7-9 02:44 上传
单片机源程序如下:
#include "mk7a11p.inc" ;编译该文档需包含"mk7a11p.inc"文件
;------------------------------------------------------------------
;芯片型号(mk7a11p)
;------------------------------------------------------------------
;配置寄存器设置说明(CONFIG)
;1-----------FOSC=RC ;LS,NS,HS,RC
;2-----------INRC=ON ;ON,OFF
;3-----------CPT=OFF ;ON,OFF
;4-----------WDTE=Disable ;Enable,Disable
;5-----------LV=Low Vol Reset ON ;Low Vol Reset ON,Low Vol Reset OFF
;6-----------RESET=...input... ;...input...,...reset...
;------------------------------------------------------------------
a_buf equ 0x20 ;acc缓存器
status_buf equ 0x21 ;status缓存器
tm_r equ 0x22 ;1s计时
pb_buf equ 0x23 ;端口缓存
del_r0 equ 0x24 ;延时计数
del_r1 equ 0x25 ;延时计数
gs_flag equ 0x26 ;高水位标志
cs_flag equ 0x27 ;常水位标志
ns_flag equ 0x28 ;浓缩位标志
fmq_flag equ 0x29 ;蜂鸣器标志位
ct1_flag equ 0x2A ;加热次数标志
ct2_flag equ 0x2B ;加热次数标志
ct3_flag equ 0x2C ;加热次数标志
grcs_flag equ 0x2e ;加热次数标志
grcs0_flag equ 0x2e ;加热次数标志
;------------------------------------------------------------------
org 0x3fe ;mk7a11p的中断向量地址定义
lgoto int ;跳转到中断程序入口
org 0x3ff ;mk7a11p的复位向量地址定义
lgoto main ;跳转到主程序入口
;------------------------------------------------------------------
org 0x000
int ;中断入口地址
;保护现场
movam a_buf
swap status,a
movam status_buf
;---------------------------------------------------------------
btsc irqf,tm0f ;判断是不是tmr0溢出中断
lgoto int_tm0 ;进入tmr0中断服务程序
;---------------------------------------------------------------
int_end
;中断结束要恢复现场
swap status_buf,a
movam status
swap a_buf,m ;这里不能用"mov a_buf,a"因为
swap a_buf,a ;"mov a_buf,a"会影响status
reti
;------------------------------------------------------------------
int_tm0 ;tmr0中断服务程序
bc irqf,tm0f ;清除tmr0中断标志
;---------------------------------------------------------------
inc tm_r,m
movla .1 ;4x250=1s
xor tm_r,a
btss status,z ;逻辑结果操作结果零标记位
lgoto int_end
clr tm_r
;---------------------------------------------------------------
movla b'00100000'
xor portb,m ;PA0的High Low切换
lgoto int_end
;------------------------------------------------------------------
delay
decsz del_r0,m ;延时消抖
lgoto delay
movla .255
movam del_r0
decsz del_r1,m
lgoto delay
ret ;子程序返回
main ;主程序入口地址定义
;PortA端口方向及状态设定
movla b'11110000'
iodir porta
clr porta
clr pa_pdm
;------------------------------------------------------
;PortB端口方向及状态设定pb2高水位键盘和绿灯控制
movla b'11001001';六个键 PB0 PB3设置为输入
iodir portb
clr portb
clr pb_pod ;lou ji kai lu
clr pb_pdm ;gong neng xuan ze
clr pb_pup ;shang la dian zu qi
bs pb_pup, 0
;bs pb_pup, 3
;------------------------------------------------------初始化
movla .0
MOVAM a_buf
movla .0
MOVAM status_buf
movla .0
MOVAM tm_r
movla .0
MOVAM pb_buf
movla .0
MOVAM gs_flag
movla .0
MOVAM cs_flag
movla .0
MOVAM ns_flag
movla .0
MOVAM fmq_flag
movla .0
MOVAM ct1_flag
movla .0
MOVAM ct2_flag
movla .0
MOVAM ct3_flag
movla .0
MOVAM grcs_flag
movla .0
MOVAM grcs0_flag
;bs pb_pup, 3
; movla b'00000001'
; xor portb,m ;PA0的High Low切换
;----------------------------------------------------------
;PortB端口8个IO唤醒使能
;movla b'11111111'
;movam wake_up
;---------------------------------------------------
;配置TMR0,预分频比为1:16
;TMR0初始值为250
movla b'11000011'
select
movla .12
movam tmr0 ;tmr0的溢出时间是:250x16=4ms
;---------------------------------------------------
;tmr0中断使能
;inc del_r0,m ;tmr0的溢出时间是:250x16=4ms
movla .255
movam del_r0
movla .255
movam del_r1
;--------------------------------------延时一段时间等待电路稳定
lcall delay
lcall delay
lcall delay
; lcall delay
; lcall delay
;--------------------------------------——————第一次读取按键;
duqu1
movla b'11001101' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
mov portb,a ;读取端口状态
movam pb_buf ;保存端口状态
COM pb_buf, m ;取反端口状态
lgoto qu01_flag ;延时状态
yqu0
movla b'11001101' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
mov portb,a ;二次读取端口状态
AND pb_buf, m
BTSc pb_buf,2 ;测试pb2 为5零sikp高水位测试位
lgoto qingchu
BTSc pb_buf,3 ;测试pb2 为5零sikp高水位测试位
lgoto qingchu
movam pb_buf ;一次测试pb0通过 。
inc grcs0_flag,m
BTSs grcs0_flag,7 ;八次测试pb0通过 。
lgoto duqu1
BTSs grcs0_flag,6 ;八次测试pb0通过 。
lgoto duqu1
BTSs grcs0_flag,5 ;八次测试pb0通过 。
lgoto duqu1
BTSc pb_buf,2
lgoto sns_flag
lgoto sgs_flag
qu01_flag
movla .200
MOVAM fmq_flag
qu011_flag
movla b'11001001' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
bc portb, 2 ;绿色指示灯亮
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
DECSZ fmq_flag, m
lgoto qu011_flag
lgoto yqu0 ;
qingchu
movla .0
MOVAM grcs0_flag
lgoto duqu1
sgs_flag
movla .1
MOVAM gs_flag
lgoto jiare_flag ;只可能一个键被按下检测到后直接跳转加热
sns_flag
BTSc pb_buf,3 ;测试pb3 为零sikp
lgoto scs_flag
movla .1
MOVAM ns_flag
lgoto jiare_flag ;只可能一个键被按下检测到后直接跳转加热
scs_flag movla .1
MOVAM cs_flag
;----------------------------------------------------------------电路全功率加热
jiare_flag
bc portb, 4 ;红色指示灯亮,
movla b'10000001'
movam irqm
clr irqf
;bs portb, 5 ;打开蜂鸣器
movla .5
movam del_r1
lcall delay ;蜂鸣器响一声,
;lcall delay ;蜂鸣器响一声,
lcall delay ;蜂鸣器响一声,
lcall delay ;蜂鸣器响一声,
movla b'00000000'
movam irqm
clr irqf
;bc portb, 5 ;关闭蜂鸣器
bs portb, 1 ;继电器打开全功率加热。
bs portb, 0
; bs portb, 0 ;继电器打开全功率加热。
jiare
mov portb,a ;读取端口状态
movam pb_buf ;保存端口状态
btss pb_buf,0 ;测试pb0
lgoto jiare ;等待温控器信号为零时跳出循环体
nop
bc portb, 4 ;红色指示灯亮,
nop
nop
nop
nop
nop
nop
nop
btss pb_buf,0 ;测试pb0
lgoto jiare ;等待温控器信号为零时跳出循环体
nop
nop
nop
nop
lcall delay
nop
nop
nop
nop
btss pb_buf,0 ;测试pb0
lgoto jiare ;等待温控器信号为零时跳出循环体
nop
nop
nop
nop
nop
nop
nop
nop
btss pb_buf,0 ;测试pb0
lgoto jiare ;等待温控器信号为零时跳出循环体
;------------------------------------------------------------加热完成延时加热;
BTSc gs_flag,0 ;为一表示高电平没有按键,跳过指令
lgoto wcjiare1 ;高水位加热后直接完成加热状态
BTSc cs_flag,0
lgoto csjiare_flag ;常水位加热后延时2分钟
BTSc ns_flag,0
lgoto nsjiare1_flag ;浓缩水位加热后延时6分钟
csjiare_flag
movla .121
MOVAM fmq_flag
csjiare1_flag
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO csjiare1_flag
LGOTO wcjiare1
nsjiare1_flag
movla .180
MOVAM fmq_flag
nsjiare11_flag
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO nsjiare11_flag
nsjiare2_flag
movla .180
MOVAM fmq_flag
nsjiare22_flag
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO nsjiare22_flag
wcjiare1
movla b'11001001';六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输出
bs portb, 4 ;红色指示灯灭,
bc portb, 1 ;关闭继电器打开全功率加热。
bs portb, 2 ;绿色指示灯亮
movla .10 ;蜂鸣器响十声,
MOVAM fmq_flag
sss1_flag
movla b'10000001'
movam irqm
clr irqf
lcall delay
lcall delay
movla b'00000000'
movam irqm
clr irqf
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO sss1_flag
bc portb, 5 ;关蜂鸣器,
;----------------------------------------------------------加热延时完成关闭加热;
;----------------------------------------------------------加热完成二次读取按键;
baowen
movla b'11001101' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
mov portb,a ;读取端口状态
movam pb_buf ;保存端口状态
COM pb_buf, m ;取反端口状态
lgoto qu1_flag ;延时状态
yqu
movla b'11001101' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
mov portb,a ;二次读取端口状态
AND pb_buf, m
BTSc pb_buf,2 ;测试pb2 为5零sikp高水位测试位
lgoto qingchu0
BTSc pb_buf,3 ;测试pb2 为5零sikp高水位测试位
lgoto qingchu0
movam pb_buf ;一次测试pb0通过 。
inc grcs_flag,m
BTSs grcs_flag,7 ;八次测试pb0通过 。
lgoto baowen
BTSc pb_buf,2
lgoto sns1_flag
lgoto jiare2
qu1_flag
movla .100
MOVAM fmq_flag
qu11_flag
movla b'11001001' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
bs portb, 2 ;绿色指示灯亮
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
DECSZ fmq_flag, m
lgoto qu11_flag
lgoto yqu ;
qingchu0
movla .0
MOVAM grcs_flag
lgoto baowen
sns1_flag
BTSc pb_buf,3 ;测试pb3 为零sikp浓缩水位测试位
lgoto scs1_flag ;不是高水位也不是浓缩水位
BTSc gs_flag,0 ;是浓缩水位,
lgoto sss_flag ;高水位转浓缩水位,转加热6分钟
BTSc cs_flag,0 ;是浓缩不是高水位
lgoto loop3 ;常水位转浓缩水位,加热四分钟
lgoto jiare2 ;是浓缩水位,不是高水位,也不是常水位转保温加热
scs1_flag ;二次读取为常水位。
BTSc gs_flag,0
lgoto loop ;高水位转常水位 加热两分钟
lgoto jiare2 ;不是高水位转常水位转到保温加热。
loop
BTSc ct1_flag,0
lgoto jiare2
inc ct1_flag,m
movla b'11001001' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
bc portb, 2 ;绿色指示灯亮
bc portb, 4 ;红色指示灯亮,
bs portb, 1 ;继电器打开全功率加热。
movla .120
MOVAM fmq_flag
nsjiare44_flag ;延时
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO nsjiare44_flag
lgoto wcjiare1 ;延时加热后转保温加热
sss_flag
BTSc ct2_flag,0
lgoto jiare2
BTSc ct1_flag,0
lgoto nsjiare045_flag
inc ct2_flag,m
movla b'11001001' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
bc portb, 2 ;绿色指示灯亮
bc portb, 4 ;红色指示灯亮,
bs portb, 1 ;继电器打开全功率加热。
movla .120
MOVAM fmq_flag
nsjiare45_flag ;延时
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO nsjiare45_flag
nsjiare045_flag
inc ct2_flag,m
bc portb, 2 ;绿色指示灯灭
bc portb, 4 ;红色指示灯亮,
bs portb, 1 ;继电器打开全功率加热。
movla .230
MOVAM fmq_flag
nsjiare46_flag ;延时
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
DECSZ fmq_flag, m
LGOTO nsjiare46_flag
lgoto wcjiare1 ;延时六分钟加热后转保温加热
loop3
BTSc ct3_flag,0
lgoto jiare2
inc ct3_flag,m
movla b'11001001' ;六个键 PB0 PB3设置为输入
iodir portb ; pb2 设 置为输入
bc portb, 2 ;绿色指示灯亮
bc portb, 4 ;红色指示灯亮,
bs portb, 1 ;继电器打开全功率加热。
movla .240
MOVAM fmq_flag
nsjiare47_flag ;延时
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
14 6A12_dzkwh.rar
(15.45 KB, 下载次数: 6)
2018-7-8 22:13 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
learned
时间:
2019-8-31 23:40
没有电路图吗?大佬
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1