- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《单片机原理及应用》
除非特别声明,编程题可以使用汇编语言编写,也可以使用C语言编写
分析程序的执行结果,将结果填写到空格中。
ORG 0000H
MOV 30H,#50H
MOV R0,#30H
MOV A,@R0 ;(A= 50H )
MOV A,#79H
MOV B,#20H ;(A= 79H B= 20H )
DIV AB ;(A= 03H B= 19H )
PUSH B
MOV B,#0AH
MUL AB ;(A= 1EH B= 00H )
POP B
ADD A,B ;(A= 37H B= 19H )
MOV 30H,A ;(30H单元的内容= 37H )
MOV 20H,30H
CLR 01H ;(20H单元的内容= 37H )
MOV A,20H ;(PSW中P的内容= 1 )
CPL A
RR A ;( PSW中C的内容= 0 )
SWAP A ;(A= 46H )
ADDC A,#0F0H ;(A= 36H )
;(PSW中P的内容= 0 )
;( PSW中C的内容= 1 )
RL A ;(A= 6CH )
;(PSW中P的内容= 0 )
;( PSW中C的内容= 0 )
LOOP: AJMP LOOP
将MCS51内部RAM60H~65H单元存放的12个16进制数变为ASCII码,放到0090H单元开始的外部RAM中。[使用汇编语言编写]
MAIN:
MOV R0,#60H
MOV R2,#6
MOV DPTR, #0090H
HASC:
MOV A,@R0
ANL A,#0FH ;屏蔽高四位
ADD A,#0DH
MOVC A,@A+PC ;查表低四位转换为ASCII码
MOVX @DPTR,A ;送如外部RAM
INC DPTR
MOV A,@R0
ANL A,#0F0H
SWAP A
ADD A,#6
MOVC,@A+PC ;高四位转换为ASCII码
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,HASC
END
ASCTAB:DB 30H 31H 32H 33H 34 H 35H 36H 37H 38H 39H
DB41H 42H 43H 44H 45H 46H
某一故障检测系统,当出现故障1时,线路1上出现上升沿;当出现故障2时,线路2上出现下降沿。没有故障时,线路1为低电平,线路2为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。
用MSC1211的T0定时/计数器,设计程序,实现在P1.0输出周期为200ms的占空比为1:1的方波,输出500个方波后停止输出。
解:ORG 0000H
LJMP MAIN
ORG 000BH ;T0口中断服务程序入口地址
LJMP INT_T0
MAIN: MOV TMOD,#00H ;T0工作于方式0定时
MOV TL0,#0CH
MOV TH0,#1EH ;设定秒中断周期为1ms
MOV A,200 ;设定输出周期为200 ms
MOV R2,1000 ;输出500个方波
SETB TR0
SETB ET0
SETB EA
SETB P1.0
SJMP $
INT_T0:MOV TL0,#0CH
MOV TH0,#1EH ;T0重装时间常数
CPL P1.0 P1.0位取反
DEC R2
JZ ENDP ;若R2为0,则结束程序,否则返主程序继续输出
RETI ;返主程序
ENDP: END
利用MSC1211的A/D构成数据采集系统。使用模拟通道0进行连续数据采集,采集8次后取得平均值,存放到预先分配好的100个内存单元中,这100个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(应在适当的地方加程序注释)。
解:#includeREG1211.H
#includestdio.h
extern void autobaud(void);//声明外部函数
extern void bipolar(void);
float a[100]={0},w[8]={0};int out=0;long result,temp;int j;
int AUXinterrupts(void)interrupt6 u
文档评论(0)