单片机课后答案及实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
INTS2: MOV @R0 , A
INC R0
RETI
ERROR: SETB 00H
RETI
END
;启动T1 ;设数据指针
;奇校验
;保存一个字符 ;报错程序
3. 以中断方式设计单片微机的秒、分发生 器。假定P1.0每秒产生一个机器周期的正脉 冲,P1.1实现每分钟产生一个机器周期的正 脉冲。加上必要的伪指令和注释。假定晶 振频率为12MHZ。
(1)若不能正常通讯,可能原因是:右下方的串行通讯波特率 (9600)开关选择错误;或串口连接导线松动。
(2)若程序确定无误,而发光二极管显示不正常,可能是导线短 路,请更换或叠加导线(个别不亮不影响观察结果,则无需更 换);若8个发光管全都不受控制,则可能是芯片损坏,请联 系老师更换。
(3)在输入指令过程中,要注意指令的完整性,不要遗漏“#”、 “END”,区别数字“0”与字母“o”、“O”,
DEL: JBC TF0,REP AJMP DEL
REP: CLR P1.2 DJNZ R0,DEL AJMP L1 END
3. 设MCS-51单片机的晶振频率为6MHZ,以计数器 T0进行外部事件计数,每计数1000个外部事件输 入脉冲后,计数器T1开始2ms定时,定时时间到后, T0又开始计数,如此周而复始地工作。
2. 像仿真器一样,我们可以在实验装置上进行软、 硬件调试,观察控制硬件的执行结果或每条指令 的执行结果;
3. 应该养成自己动手的习惯,只有多动手才有可能 深入掌握软、硬件知识;
4. 刚开始接触肯定会有很多问题,应该学会自己分 析问题,解决问题,不要急于问老师;
5. 做实验前要认真准备,编好源程序,有效利用紧 张的实验时间。
习题讲解
第4章 习题讲解
1. P98 第12题
MOV R0,#0A7H ;R0=0A7H,A=X
XCH A,R0
;A=0A7H,R0=X
SWAP A
;A=7AH,R0=X
XCH A,R0
;R0=7AH,A=X
2, P98,第15题
若执行ADDC A,B 指令,A=37H,CY=1;
若执行SUBB A,B 指令,A=3BH,CY=0
2. 已知80C51单片机系统时钟频率为 6MHZ,请利用定时器T0和P1.2输出矩 形脉冲。
参考程序:
定时50us
ORG 0000H
MOV TMOD , #02H ;定时模式2
MOV TH0 , #0E7H ;初始值
MOV TL0 , #0E7H
SETB TR0
L1: SETB P1.2 MOV R0,#7
MOV R0,#30H
MOV R7,#20H
MOV IE , #90H
MOV A,@R0
JB
P ,SEND1
SETB TB8
SEND1:MOV SBUF,A
INC R0
SJMP $
INTS: CLR TI
DJNZ R7 , OUT
MOV A,@R0
JB P , SEND2
SETB TB8
AJMP INTS3
(4)程序编写完成后,应当自己先认真分析程序执行路径,查找 明显的逻辑错误,以免产生莫名错误。特别注意子程序不能放 在程序起始部位,同时要特别注意延时程序的循环构架。
实验一(1)
实验要求: (1)P1口作为输出口,接8只发光二极管,
要求编程使放光二极管循环点亮; (2)P1口做输入口,接8个扭子开关,以实
MOV R7 , #00H
;定时10ms
CLR P1.0 CLR P1.1 SETB ET0 SETB EA SJMP $ INT_T0: MOV TL0 , #0F0H MOV TH0 , #0D8H INC R6 CJNE R6 , #100 , OUT MOV R6 , #00H
;定时1秒钟 ;为下个周期作准备
另一种解法:at89s51具有双数据指针
MOV R2,#10
MOV DPTR,#0200H
SETB DPS
;(AUXR1.0), P50
MOV DPTR,#0300H
LOOP:CLR DPS
MOVX A,@DPTR
ANL A,#0FH SWAP A XCH A,B
INC DPTR MOVX A,@DPTR ANL A,#0FH ORL A,B INC DPTR SETB DPS MOVX @DPTR,A INC DPTR DJNZ R2,LOOP CLR DPS SJMP $
SETB CLR INC CJNE MOV SETB CLR OUT: RETI END
P1.0 P1.0 R7 R7 , #60 , OUT R7 , #00H P1.1 P1.1
;正脉冲输出
;定时1分钟 ;为下个周期作准备 ;正脉冲输出
实验知识预备
1. 单版微机实验装置相当于一个仿真器,可以仿真 MCS-51单片机的绝大部分硬件功能;
LOOP:MOVX A,@DPTR INC DPTR JNZ L1
INC 32H
;=0
SJMP L3
L1:JB ACC.7,L2
INC 30H
;>0
SJMP t;0
L3:DJNZ R7,LOOP
SJMP $
2,P130 第12题 MOV R2,#10 MOV R3,#02H MOV R4,#00H MOV R5,#03H MOV R6,#00H
验机上的74LS273作为输出口(接8个发光 管),要求编写程序使得发光管的状态能够 反映出开关的状态; 实验目的:学习并行口的使用方法;
参考程序:
ORG 0000H
MOV TMOD , #15H ;计数器工作模式
LOOP:MOV TL0 , #18H
;65536-1000
MOV TH0 , #0FCH
SETB TR0
JNB TF0, $
;等待计数1000次
CLR TR0
若为方式0:TMOD=14H,初值为 E018H;不适合用方式2
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP INTS
ORG 0030H
MAIN: MOV SCON , #0C0H ;串行口方式3
MOV TMOD , #20H ;T1方式2定时
MOV TL1 , #0E8H
;写入T1时间常数
MOV TH1 , #0E8H
SETB TR1
;启动T1
3, P99,第18题
MOV 30H , #0A4H MOV A , #0D6H MOV R0 , #30H MOV R2 , #47H ANL A , R2 ORL A , @R0 SWAP A CPL A XRL A , #0FFH ORL 30H , A
;30H=A4H ;A=0D6H ;R0=30H ;R2=47H ;A=46H ;A=E6H ;A=6EH ;A=91H ;A=6EH ;30H=EEH
;设数据指针 ;数据长度 ;启动发送一次
;启动一次发送
;是否发送完? ;取一个字符 ;加奇校验
SEND2: CLR TR8 SEND3: MOV SBUF,A
INC R0 OUT: RETI
END (2)接收程序:
ORG 0000H AJMP MAIN ORG 0023H AJMP INTS ORG 0030H MAIN: MOV SCON , #0D0H MOV TMOD , #20H MOV TL1 , #0E8H MOV TH1 , #0E8H
3,P131 第17题 MOV R7,#33 MOV R0,#40H MOV DPTR,#2540H
LOOP:MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DINZ R7,LOOP SJMP $
第6章 习题讲解
1. 设MCS-51单片机的晶振频率为12MHZ,试用单片机的内 部定时器方式产生频率为10KHZ的等宽矩形方波信号。
LOOP:MOV DPH,R3 MOV DPL,R4 MOVX A,@DPTR
ANL A,#0FH SWAP A XCH A,B INC DPTR MOVX A,@DPTR ANL A,#0FH ORL A,B INC DPTR MOV R3,DPH MOV R4,DPTR
MOV DPH,R5 MOV DPL,R6 MOVX @DPTR,A INC DPTR MOV R5,DPH MOV R6,DPL DJNZ R2,LOOP SJMP $
解:要求定时时间为1s,若采用定时模式1, 根据公式:定时时间T=(65536-初始值 x)Tcy,可知最大定时时间为65.536ms。若 定时10ms,则必须有100个10ms,即100次 溢出中断为1s,10ms时间常数为D8F0H。
ORG 0000H AJMP MAIN ORG 000BH AJMP INT_T0 ORG 0030H MAIN: MOV TMOD , #01H MOV TL0 , #0F0H MOV TH0 , #0D8H SETB TR0 MOV R6 , #00H
实验的基本步骤(1):
1. 启动LCAET软件。
2. File→New,建立新文件;输入汇编源程序。
3.另存为*.asm,此时操作码显示蓝色。
注意:汇编程序后缀必须为asm,否则不能正确编译; 文件名不能太长,应小于8个字符;存放路径不能为中 文;
4. 在“编译”菜单栏,使用编译当前文件命令,对源程
序进行编译,下面信息栏会提示语法错误的位置和类 型,若有错,修改后继续编译,直至没有错误为止。
注意:其中若提示不能与实验机通讯,可打开实验装置 电源(右上角有电源开关);若已经打开,请按RST 键,使实验仪恢复,利于下载通讯。
实验的基本步骤(2):
5. 在断电状态下,按照实验指导书要求正确连线, 不要随意乱插乱放,同时因导线容易损坏,请轻 拔轻插,不能硬拉猛攥。
CLR TF0
MOV TL1 , #18H
;定时2ms
MOV TH1 , #0FCH
SETB TR1
JNB TF1 , $
;等待1ms时间到
CLR TR1
CLR TF1
AJMP LOOP
;循环重复
END
若为方式0:初值为E018H;不适 合用方式2
第7章 习题讲解
1. 在80C51的应用系统总时钟频率为6MHZ,现需利 用定时器T1产生波特率为1200bps。请计算初值, 实际得到的波特率的误差是多少? 波特率发生器T1采用工作方式2,波特率不加倍 (即SMOD=0),计算时间常数(初始值)。 TL1=TH1=X =256-2SMOD×fosc/(32×12×B) =243=F3H(其中SMOD=0)
6. 打开实验装置电源(右上端),再次使用编译当 前文件命令,使得将机器码传送到实验仪。
注意:若实验装置已经打开运行,请按RST键,使 实验仪恢复,利于下载通讯。
7. 在“调试”菜单栏,使用全速运行或单步运行命
令,执行程序,查看运行结果,检查内在逻辑错 误,有错则返回第4步继续修改汇编源程序。
注意:
实际波特率B=(20/32)×fosc / [12×(28-243)] =1201.923(误差0.16%)
2. 以80C51串行口按工作方式3进行串行数据通讯。假定波特 率为1200bps,第9位作为奇校验位,以中断方式传送数据, 请编写通讯程序。
假定晶振频率为11.0592MHZ。
(1)发送程序:
;启动一次发送 ; 修改指针
;串行口方式3 ;T1方式2定时 ;写入T1时间常数
SETB TR1
MOV R0,#30H
MOV IE , #90H
SJMP $
INTS:MOV A,SBUF
CLR RI
JB
P , INTS1
JNB RB8 , ERROR
AJMP INTS2
INTS1: JB
RB8 , ERROR
4,P100,第27题
MOV DPTR , #2100H MOVX A , @DPTR ORL A , #0F0H ANL A , #0F0H MOVX @DPTR , A
其实:MOV DPTR , #2100H MOV A , #0F0H MOVX @DPTR , A
第5章 习题讲解
1,P130 第6题 MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV DPTR,#2000H MOV R7,#100
ORG 0000H
MOV TMOD , #02H
MOV TL0 , #0CEH
;T=100us,定时50us
MOV TH0 , #0CEH
SETB TR0
LOOP: JNB TF0,$
若为方式0:
CLR TF0 CPL P1.0 AJMP LOOP END
初值为FE0EH; 若为方式1: 初值为FFCEH; 需要重装初值。