南昌大学单片机课程设计设计图源程序文件.docx
- 文档编号:25540029
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:23
- 大小:157.99KB
南昌大学单片机课程设计设计图源程序文件.docx
《南昌大学单片机课程设计设计图源程序文件.docx》由会员分享,可在线阅读,更多相关《南昌大学单片机课程设计设计图源程序文件.docx(23页珍藏版)》请在冰豆网上搜索。
南昌大学单片机课程设计设计图源程序文件
(上图硬件原理图可以另存为图片放大了看,清晰度五颗星,放心好了)
源程序清单
1.汇编程序
ORG0000H;主程序入口
0000020030LJMPMAIN
ORG0003H;外部中断0入口
00030200D4LJMPA2D
ORG000BH;t0入口
000B02007ALJMPSELECT
ORG0013H;外部中断1入口
0013020062LJMPKEY
ORG0030H
MAIN:
;主程序
003075A886MOVIE,#86H;外部中断0,t0,外部中断1使能
00337590F6MOVP1,#0F6H;键盘初值
0036758C3CMOVTH0,#3CH;t0赋初值
0039758AB0MOVTL0,#0B0H
003C758901MOVTMOD,#01H;设置t0工作方式为方式1
003FD288SETBIT0;打开中断0
0041120048LCALLXUEHAO;调用显示学号子程序
00447C1EMOVR4,#30;设置t0延时次数,即任务中延时1.5s的功能选择,因为定时器最多计时65536us,所以需要多次计时累计
004680FESJMP$;踏步命令
00489001A7XUEHAO:
MOVDPTR,#XUEHAOTAB;学号显示子程程序
004B7A03MOVR2,#3;3次刷新
004D7B05XUEHAO2:
MOVR3,#5;每次发送5个显示码进数码管
004F7400XUEHAO1:
MOVA,#0;a清零,dptr自加来选择需要显示的字型码
005193MOVCA,@A+DPTR;查表,给a赋值
0052F599MOVSBUF,A;a发送到串行口
00543099FDJNBTI,$;查询串行口发送中断标志位
0057C299CLRTI;清除中断标志位,准备进行下一次发送
0059A3INCDPTR;dptr加1,指向下一个字型码地址
005ADBF3DJNZR3,XUEHAO1;执行显示5个字型码
005C12018DLCALLDELAY1S;延迟1s
005FDAECDJNZR2,XUEHAO2;刷新3次
006122RET
006212019EKEY:
LCALLDELAY10MS;键盘按键响应程序
006520B311JBP3.3,KEY1;延迟10ms之后判断是否按键还是按下状态,为按下则返回
00689001B6MOVDPTR,#SHUZITAB;dptr指向数字表首地址
006B1200B4LCALLJUDGEKEY;调用判断键值子程序
006E04INCA;键值加1调用字型码(因为硬件显示的数字比键值大1)
006F93MOVCA,@A+DPTR;查表得字型码
0070F599MOVSBUF,A;发送a到串行口进行显示
00723099FDJNBTI,$;
0075C299CLRTI
0077D28CSETBTR0;打开定时器t0
007932KEY1:
RETI;中断返回
SELECT:
;长按1.5s功能选择程序
007A20B319JBP3.3,SELECTOUT;判断按键是否按下,否则返回
007DDC17DJNZR4,SELECTOUT;判断是否达到1.5s,否则r4减1返回(r4记录中断次数)
007F1200B4LCALLJUDGEKEY;调用判断键值子程序
0082B40003CJNEA,#0,SELECT1;得到a的键值,判断功能
008512009DLCALLD2A
0088B40103SELECT1:
CJNEA,#1,SELECT2
008B120048LCALLXUEHAO
008EB40303SELECT2:
CJNEA,#3,SELECT3
00911200CALCALLATOD
00947C1ESELECT3:
MOVR4,#30;r4重新赋初值
0096758C3CSELECTOUT:
MOVTH0,#3CH;定时计数器重新赋初值
0099758A0BMOVTL0,#0BH
009C32RETI;中断返回
009D900FFFD2A:
MOVDPTR,#0FFFH;数模转换程序
00A074C8MOVA,#200
00A27A64MOVR2,#100
00A414D2A1:
DECA
00A5F0MOVX@DPTR,A
00A6B400FBCJNEA,#0,D2A1
00A9120195LCALLDELAY3MS
00AC04D2A2:
INCA
00ADF0MOVX@DPTR,A
00AEB4C8FBCJNEA,#200,D2A2
00B1DAF1DJNZR2,D2A1
00B322RET
00B47800JUDGEKEY:
MOVR0,#0;键值判断程序
00B67400MOVA,#0
00B8309402JNBP1.4,JP1
00BB7801MOVR0,#1
00BD7590A7JP1:
MOVP1,#0A7H
00C0309002JNBP1.0,JP2
00C37402MOVA,#2
00C528JP2:
ADDA,R0
00C67590F6MOVP1,#0F6H
00C922RET
00CAE4ATOD:
CLRA;模数转换程序
00CBD2A8SETBEX0;打开中断0
00CD90FFFEMOVDPTR,#0FFFEH;dptr指向adc0808首地址
00D0F0MOVX@DPTR,A;启动adc0808
00D17814MOVR0,#20;重新设定采样次数
00D322RET;返回
A2D:
;模数转换中断响应程序
00D490FFFEMOVDPTR,#0FFFEH
00D7D2D4A2D1:
SETBRS1;打开第三组
00D9E0MOVXA,@DPTR;取得adc0808反馈值
00DAF5F0MOVB,A;把a中的值倒置(因为采样的时候是从高位到低位倒置的)
00DC7400MOVA,#0
00DE30F702JNBB.7,SS1
00E1D2E0SETBACC.0
00E330F602SS1:
JNBB.6,SS2
00E6D2E1SETBACC.1
00E830F502SS2:
JNBB.5,SS3
00EBD2E2SETBACC.2
00ED30F402SS3:
JNBB.4,SS4
00F0D2E3SETBACC.3
00F230F302SS4:
JNBB.3,SS5
00F5D2E4SETBACC.4
00F730F202SS5:
JNBB.2,SS6
00FAD2E5SETBACC.5
00FC30F102SS6:
JNBB.1,SS7
00FFD2E6SETBACC.6
010130F002SS7:
JNBB.0,SS8
0104D2E7SETBACC.7
010675F033SS8:
MOVB,#51;以下将得到数值转换成bcd码,因为a的范围是0~255,电压范围是0~5,所以将得到值除以51得到最高位整数值
010984DIVAB;然后第二位再乘10,除以51,得到第二位,以此类推
010AFBMOVR3,A
010BE5F0MOVA,B
010D75F00AMOVB,#10
0110A4MULAB
0111FAMOVR2,A
0112E5F0MOVA,B
0114B4000ACJNEA,#00,LP1
0117EAMOVA,R2
011875F033MOVB,#51
011B84DIVAB
011CFAMOVR2,A
011DE5F0MOVA,B
011F800BSJMPLP2
0121EALP1:
MOVA,R2
012204INCA
012375F033MOVB,#51
012684DIVAB
01272405ADDA,#5
0129FAMOVR2,A
012AE5F0MOVA,B
012C75F00ALP2:
MOVB,#10
012FA4MULAB
0130F9MOVR1,A
0131E5F0MOVA,B
0133B40008CJNEA,#0,LP3
0136E9MOVA,R1
013775F033MOVB,#51
013A84DIVAB
013BF9MOVR1,A
013C8009SJMPLP4
013EE9LP3:
MOVA,R1
013F04INCA
014075F033MOVB,#51
014384DIVAB
01442405ADDA,#5
0146F9MOVR1,A
0147120157LP4:
LCALLDIANYA
014AC2D4CLRRS1
014C90FFFEMOVDPTR,#0FFFEH
014FF0MOVX@DPTR,A;转换完成,最高位,次高位,最低位分别放在r3,r2,r1
0150D882DJNZR0,A2D
01527814MOVR0,#20
0154C2A8CLREX0
015632RETI
015774FFDIANYA:
MOVA,#0ffH;显示电压程序
0159F599MOVSBUF,A;显示黑
015B3099FDJNBTI,$
015EC299CLRTI
016074FFMOVA,#0FFH
0162F599MOVSBUF,A
01643099FDJNBTI,$
0167C299CLRTI
01699001B6MOVDPTR,#SHUZITAB
016CEBMOVA,R3
016D93MOVCA,@A+DPTR
016E547FANLA,#7FH
0170F599MOVSBUF,A
01723099FDJNBTI,$
0175C299CLRTI
0177EAMOVA,R2
017893MOVCA,@A+DPTR
0179F599MOVSBUF,A
017B3099FDJNBTI,$
017EC299CLRTI
0180E9MOVA,R1
018193MOVCA,@A+DPTR
0182F599MOVSBUF,A
01843099FDJNBTI,$
0187C299CLRTI
018912018DLCALLDELAY1S
018C22RET
018D7D64DELAY1S:
MOVR5,#100;延时一秒子程序
018F12019EDELAY1S1:
LCALLDELAY10MS
0192DDFBDJNZR5,DELAY1S1
019422RET
01957E06DELAY3MS:
MOVR6,#6;延时一秒子程序
01977FFADELAY3MS1:
MOVR7,#250
0199DFFEDJNZR7,$
019BDEFADJNZR6,DELAY3MS1
019D22RET
019E7E14DELAY10MS:
MOVR6,#20;延时一秒子程序
01A07FFADELAY10MS1:
MOVR7,#250
01A2DFFEDJNZR7,$
01A4DEFADJNZR6,DELAY10MS1
01A622RET
01A7FFFFF7
01AAF7F7XUEHAOTAB:
DB0FFH,0FFH,0F7H,0F7H,0F7H;学号显示表
01ACFBFBAB
01AFA7B3DB0FBH,0FBH,0ABH,0A7H,0B3H
01B1F9F9C0
01B482B0DB0F9H,0F9H,0C0H,82H,0B0H
01B6C0F9A4
01B9B09992
01BC82F880
01BF90SHUZITAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;数字表
符号值类型
A2D=00D4HCODE标号
A2D1=00D7HCODE标号
AC=00D6HCONST常量
ACC=00E0HCONST常量
ATOD=00CAHCODE标号
B=00F0HCONST常量
CY=00D7HCONST常量
D2A=009DHCODE标号
D2A1=00A4HCODE标号
D2A2=00ACHCODE标号
DELAY10MS=019EHCODE标号
DELAY10MS1=01A0HCODE标号
DELAY1S=018DHCODE标号
DELAY1S1=018FHCODE标号
DELAY3MS=0195HCODE标号
DELAY3MS1=0197HCODE标号
DIANYA=0157HCODE标号
DPH=0083HCONST常量
DPL=0082HCONST常量
EA=00AFHCONST常量
ES=00ACHCONST常量
ET0=00A9HCONST常量
ET1=00ABHCONST常量
EX0=00A8HCONST常量
EX1=00AAHCONST常量
F0=00D5HCONST常量
F1=00D1HCONST常量
IE=00A8HCONST常量
IE0=0089HCONST常量
IE1=008BHCONST常量
IP=00B8HCONST常量
IT0=0088HCONST常量
IT1=008AHCONST常量
JP1=00BDHCODE标号
JP2=00C5HCODE标号
JUDGEKEY=00B4HCODE标号
KEY=0062HCODE标号
KEY1=0079HCODE标号
LP1=0121HCODE标号
LP2=012CHCODE标号
LP3=013EHCODE标号
LP4=0147HCODE标号
MAIN=0030HCODE标号
OV=00D2HCONST常量
P=00D0HCONST常量
P0=0080HCONST常量
P1=0090HCONST常量
P2=00A0HCONST常量
P3=00B0HCONST常量
PCON=0087HCONST常量
PS=00BCHCONST常量
PSW=00D0HCONST常量
PT0=00B9HCONST常量
PT1=00BBHCONST常量
PX0=00B8HCONST常量
PX1=00BAHCONST常量
RB8=009AHCONST常量
REN=009CHCONST常量
RI=0098HCONST常量
RS0=00D3HCONST常量
RS1=00D4HCONST常量
SBUF=0099HCONST常量
SCON=0098HCONST常量
SELECT=007AHCODE标号
SELECT1=0088HCODE标号
SELECT2=008EHCODE标号
SELECT3=0094HCODE标号
SELECTOUT=0096HCODE标号
SHUZITAB=01B6HCODE标号
SM0=009FHCONST常量
SM1=009EHCONST常量
SM2=009DHCONST常量
SP=0081HCONST常量
SS1=00E3HCODE标号
SS2=00E8HCODE标号
SS3=00EDHCODE标号
SS4=00F2HCODE标号
SS5=00F7HCODE标号
SS6=00FCHCODE标号
SS7=0101HCODE标号
SS8=0106HCODE标号
TB8=009BHCONST常量
TCON=0088HCONST常量
TF0=008DHCONST常量
TF1=008FHCONST常量
TH0=008CHCONST常量
TH1=008DHCONST常量
TI=0099HCONST常量
TL0=008AHCONST常量
TL1=008BHCONST常量
TMOD=0089HCONST常量
TR0=008CHCONST常量
TR1=008EHCONST常量
XUEHAO=0048HCODE标号
XUEHAO1=004FHCODE标号
XUEHAO2=004DHCODE标号
XUEHAOTAB=01A7HCODE标号
公有符号:
97
私有符号:
0
以下程序为wave输入源程序,不带机器码,方便同学复制粘贴体验神奇效果~
ORG0000H;主程序入口
LJMPMAIN
ORG0003H;外部中断0入口
LJMPA2D
ORG000BH;t0入口
LJMPSELECT
ORG0013H;外部中断1入口
LJMPKEY
ORG0030H
MAIN:
;主程序
MOVIE,#86H;外部中断0,t0,外部中断1使能
MOVP1,#0F6H;键盘初值
MOVTH0,#3CH;t0赋初值
MOVTL0,#0B0H
MOVTMOD,#01H;设置t0工作方式为方式1
SETBIT0;打开中断0
LCALLXUEHAO;调用显示学号子程序
MOVR4,#30;设置t0延时次数,即任务中延时1.5s的功能选择,因为定时器最多计时65536us,所以需要多次计时累计
SJMP$;踏步命令
XUEHAO:
MOVDPTR,#XUEHAOTAB;学号显示子程程序
MOVR2,#3;3次刷新
XUEHAO2:
MOVR3,#5;每次发送5个显示码进数码管
XUEHAO1:
MOVA,#0;a清零,dptr自加来选择需要显示的字型码
MOVCA,@A+DPTR;查表,给a赋值
MOVSBUF,A;a发送到串行口
JNBTI,$;查询串行口发送中断标志位
CLRTI;清除中断标志位,准备进行下一次发送
INCDPTR;dptr加1,指向下一个字型码地址
DJNZR3,XUEHAO1;执行显示5个字型码
LCALLDELAY1S;延迟1s
DJNZR2,XUEHAO2;刷新3次
RET
KEY:
LCALLDELAY10MS;键盘按键响应程序
JBP3.3,KEY1;延迟10ms之后判断是否按键还是按下状态,为按下则返回
MOVDPTR,#SHUZITAB;dptr指向数字表首地址
LCALLJUDGEKEY;调用判断键值子程序
INCA;键值加1调用字型码(因为硬件显示的数字比键值大1)
MOVCA,@A+DPTR;查表得字型码
MOVSBUF,A;发送a到串行口进行显示
JNBTI,$;
CLRTI
SETBTR0;打开定时器t0
KEY1:
RETI;中断返回
SELECT:
;长按1.5s功能选择程序
JBP3.3,SELECTOUT;判断按键是否按下,否则返回
DJNZR4,SELECTOUT;判断是否达到1.5s,否则r4减1返回(r4记录中断次数)
LCALLJUDGEKEY;调用判断键值子程序
CJNEA,#0,SELECT1;得到a的键值,判断功能
LCALLD2A
SELECT1:
CJNEA,#1,SELECT2
LCALLXUEHAO
SELECT2:
CJNEA,#3,SELECT3
LCALLATOD
SELECT3:
MOVR4,#30;r4重新赋初值
SELECTOUT:
MOVTH0,#3CH;定时计数器重新赋初值
MOVTL0,#0BH
RETI;中断返回
D2A:
MOVDPTR,#0FFFH;数模转换程序
MOVA,#200
MOVR2,#100
D2A1:
DECA
MOVX@DPTR,A
CJNEA,#0,D2A1
LCALLDELAY3MS
D2A2:
INCA
MOVX@DPTR,A
CJNEA,#200,D2A2
DJNZR2,D2A1
RET
JUDGEKEY:
MOVR0,#0;键值判断程序
MOVA,#0
JNBP1.4,JP1
MOVR0,#1
JP1:
MOVP1,#0A7H
JNBP1.0,JP2
MOVA,#2
JP2:
ADDA,R0
MOVP1,#0F6H
RET
ATOD:
CLRA;模数转换程序
SETBEX0;打开中断0
MOVDPTR,#0FFFEH;dptr指向adc0808首地址
MOVX@DPTR,A;启动adc0808
MOVR0,#20;重新设定采样次数
RET;返回
A2D:
;模数转换中断响应程序
MOVDPTR,#0FFFEH
A2D1:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 单片机 课程设计 设计图 源程序 文件