打铃仪Word格式文档下载.docx
- 文档编号:18666025
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:100.36KB
打铃仪Word格式文档下载.docx
《打铃仪Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《打铃仪Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
时加1(定时器组加1)键
K3:
分加1(定时器时加1)键
K4:
秒加1(定时器分加1)键
K5:
定时器状态改变既存储键
3.程序流程图
通电
A
N
Y
图3总体软件流程图
图4校时程序流程图
A
N
N
图5校分及显示流程图
4.程序清单
1.初始化程序:
READEQU0;
读93C46
WRITEEQU2;
写入93C46
EWENEQU4;
93C46写入使能
EWDSEQU6;
93C46写入禁止
ADR46EQU21H;
93C46地址
THIGHEQU0F8H
TLOWEQU5FH
TIMENEQU30;
打铃持续时间(30秒)
CSBITP3.7;
93C46CS
CLKBITP3.6;
93C46CLK
DIBITP3.5;
93C46DI
DOBITP3.4;
93C46DO
ORG0000H;
主程序起始地址
AJMPSTART;
跳至主程序
ORG000BH;
TIMER0中断起始地址
AJMPTIM0;
跳至TIMER0中断子程序
START:
MOVSP,#60H;
设置堆栈在60H
MOV28H,#00;
显示寄存器初值为00
MOVR6,#12H;
“时”寄存器值为12H
MOVR5,#00H;
“分”寄存器值为00H
MOVR4,#00H;
“秒”寄存器值为00H
MOVTMOD,#01H;
设TIMER0为MODE1
MOVTH0,#THIGH;
计时中断为4000微秒
MOVTL0,#TLOW
MOVIE,#82;
TIMER中断使能
MOVR2,#250;
中断250次
SETBTR0;
启动TIMER0
2.键值处理程序:
LOOP:
SETBP0.5;
工作模式
CLRP0.6
CLRP0.7
JBP0.0,N1;
K1(模式选择键)按了?
不是则跳至N1
ACALLDELAY;
消除抖动
JNBP0.0,$;
K1(模式选择键)放开了?
AJMPSET;
转到定时模式SET
N1:
MOV2FH,R6;
将时钟数据载入2FH中
MOV2EH,R5;
将分钟数据载入2EH中
MOVADR46,#00;
把93C46地址置0
SETBRS0;
将工作寄存器组选择1区
LOOP1:
MOVA,#READ;
ACALLTO93c46
MOVA,R3;
取出定时器的状态
ANLA,#01H
CJNEA,#01H,N2;
定时器为关闭,则跳转至N2
MOVA,R4;
取出定时器分钟数据
CJNEA,2FH,N2;
定时器分钟数据与时钟分钟不同则转至N2
MOVA,R5;
取出定时器时钟数据
CJNEA,2EH,N2;
定时器时钟数据与时钟时钟不同则转至N2
SETBP2.1;
定时器时间到,打铃
MOVA,ADR46;
将93C46地址载入A中
N2:
CJNEA,#1EH,N3;
到定时器数据表表尾?
没到转至N3
到表尾,置93C46地址为表头
AJMPLOOP1;
转至LOOP1
N3:
INCADR46;
93C46地址加2
INCADR46
SET:
CLRP0.5;
校时模式
SETBp0.6
LOOPS:
JBP0.0,N11;
不是则跳至N11
ACALLDELAY;
JNBP0.0,$;
ACALLDELAY;
AJMPSETTIME;
转至SETTIME
N11:
JBP0.1,N13;
K2(时钟加1键)按了?
不是则跳至N13
MOVA,R6;
将时寄存器的值载入A
ADDA,#01H;
A内容加1
DAA;
做十进制调整
MOVR6,A;
将A的值存入时寄存器
CJNEA,#24H,N12;
是否超过24时?
不是则跳至N12
MOVR6,#00H;
是则清除时寄存器的值为00
N12:
JNBP0.1,$;
K2(时钟加1键)放开了?
N13:
JBP0.2,N15;
K3(分钟加1键)按了?
不是则跳至N15
将分寄存器的值载入A
ADDA,#01;
DAA;
MOVR5,A;
将A的值存入分寄存器
CJNEA,#60H,N14;
是否超过60分?
不是则跳至N14
MOVR5,#00H;
是则清除分寄存器的值为00
N14:
JNBP0.2,$;
K3(分钟加1键)放开了?
N15:
JBP0.3,N17;
K4(秒钟加1键)按了?
不是则跳至N17
MOVA,R4;
将秒寄存器的值载入A
MOVR4,A;
将A的值存入秒寄存器
CJNEA,#60H,N16;
是否超过60秒?
不是则跳至N16
MOVR4,#00;
N16:
JNBP0.3,$;
K4(秒钟加1键)放开了?
N17:
AJMPLOOPS;
转至LOOPS
SETTIME:
CLRP0.5;
定时模式
SETBP0.7
MOVADR46,#00H
MOVA,#READ;
读93C46地址为ADR46中的数据
ACALLTO9346
LOOPB:
ACALLDISP;
调用DISP
JBP0.0,N21;
不是则跳至N21
AJMPLOOP;
转至LOOP
N21:
JBP0.1,N22;
K2(定时器组加1键)按了?
不是则跳至N22
将地址载入A
CLRC;
清除进位位
RRCA;
A右移1位
地址加1
将A存入R6
CLRC;
清除进位位
RLCA;
A左移1位
MOVADR46,A;
将A中地址存入ADR46
ACALLTO9346
K2(定时器组加1键)放开了?
N22:
JBP0.2,N24;
K3(定时器分钟加1键)按了?
不是则跳至N24
将定时器分寄存器的值载入A
将A的值存入定时器分寄存器
CJNEA,#60H,N23;
MOVR4,#00H;
N23:
K3(定时器分钟加1键)放开了?
N24:
JBP0.3,N26;
K4(定时器时钟加1键)按了?
不是则跳至N26
将定时器时寄存器的值载入A
将A的值存入定时器时寄存器
CJNEA,#24H,N25;
不是则跳至N25
MOVR5,#00;
N25:
K4(定时器时钟加1键)放开了?
N26:
JBP0.4,N27;
K5(改变定时器状态存储键)按了?
不是则跳至N27
INCR3;
改变R3最低位的值(表示定时器的状态,1表示开,0表示关)
MOVA,#WRITE;
将A的值写入93C46地址为ADR46中
ACALLTO9346
JNBP0.4,$;
K5(改变定时器状态存储键)放开了?
N27:
AJMPLOOPB;
转至LOOPB
3.读写93C46程序:
TO9346:
SETBCS;
CS=1
SETBDI;
DI=1
SETBCLK;
CLK=1
ACALLDELAY
CLRCLK;
CLK=0
ACALLDELAY
MOVDPTR,#JPTBL46
JMP@A+DPTR;
JPTBL46:
AJMPSREAD;
读
AJMPSWRITE;
写
AJMPSEWEN;
写使能
AJMPSEWDS;
写禁止
SREAD:
地址载入A
ADDA,#80H;
10XXXX读指令
ACALLSDT46;
读入地址
ACALLRDT46;
读定时器时钟数据
存入R5
读定时器分钟数据
存入R4
读定时器状态数据
ACALLRDT46
DECADR46
MOVR3,A;
存入R3
AJMPEX9346
SWRITE:
MOVA,ADR46;
写入地址载入A
ADDA,#40H;
01XXXX写指令
载入地址
载入定时器时钟数据
ACALLSDT46;
写入定时器时钟数据
载入定时器分钟数据
写入定时器分钟数据
载入地址
载入定时器状态数据
DECADR46;
地址减1
ACALLADR46;
写入定时器状态数据
AJMPEX9346;
转至EX9346
SEWEN:
MOVA,#30H;
0011XXXX写使能指令
ACALLSDT46
AJMPEX9346
SEWDS:
CLRA;
0000XXXX写禁止指令
EX9346:
CLRCS;
CS=0
RET
SDT46:
MOVR2,#8;
写入8位数据
SD1:
RLCA
MOVDI,C
SETBCLK
CLRCLK
DJNZR2,SD1
RET
RDT46:
读出8位数据
RD1:
MOVC,DO
DJNZR2,RD1
DELAY:
MOVR7,#0FH;
DJNZR7,$
4.中断程序:
TIM0:
MOVTH0,#THIGH;
重设计时4000微秒
PUSHACC;
将A的值存入堆栈
PUSHPSW;
将PSW的值存入堆栈
CLRRS0;
设置工作寄存器为0区
DJNZR2,X2;
计时1秒
MOVR2,#250
ACALLCLOCK;
调用计时子程序CLOCK
ACALLDISP;
调用显示子程序
X2:
ACALLSCAN;
调用扫描子程序
POPPSW
POPACC
RETI
显示器驱动程序:
SCAN:
MOVR0,#28H;
(28H)为扫描指针
INC@R0;
扫描指针加1
CJNE@R0,#6,X3;
扫描完6个显示器?
不是跳至X3
MOV@R0,#00;
是则扫描指针为0
X3:
MOVA,@R0;
扫描指针载入A
ADDA,#20;
A加常数20H(显示寄存器地址)=各时间显示区地址
;
存入R1=各时间显示地址
MOVR1,A;
扫描指针存入A
将A高低4位交换(P1高4位为扫描值,
SWAPA;
低4位为显示数据值)
ORLA,@R1;
扫描值+显示值
输出至P1
RET
计时程序:
CLOCK:
MOVA,R4;
R4为秒寄存器
ADDA,#01;
加1
存入秒寄存器
CJNEA,#TIMEN,X4;
是否超过打零连续时间?
不是则跳至X4
CLRP2.0;
关铃
X4:
CJNEA,#60H,X5;
不是则跳至X5
是则清除为0
R5为分寄存器
MOVR5,A;
存入分寄存器
CJNEA,#60H,X5;
MOVR5,#00;
MOVA,R6;
R6为时寄存器
MOVR6,A;
存入时寄存器
MOVR6,#00;
X5:
5.显示程序:
DISP:
MOVR1,#20;
(20H)为显示寄存器,R1=20H
将时寄存器的内容存入A
MOVB,#01H;
设B累加器的值为10H
DIVAB;
A/B,商(十位数)存入A,余数(个位数)存入B
MOV@R1,B;
将B的内容存入(20H)
INCR1;
R1=21H
MOV@R1,A;
将A的内容存入(21H)
R1=22H
将分寄存器的内容存入A
将B的内容存入(22H)
R1=23H
将A的内容存入(23H)
R1=24H
将秒寄存器的内容存入A
将B的内容存入(24H)
R1=25H
将A的内容存入(25H)
END
参考文献
[1] 李朝青.单片机原理及接口技术(修订版).北京:
北京航空航天大学出版社,1998
[2] 李广弟.单片机基础.北京:
北京航空航天大学出版社,1992
[3]何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
[4] 张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1990
[5] 谭浩强.单片机课程设计.北京:
清华大学出版社,1989
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打铃