版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用除非特别声明,编程题可以使用汇编语言编写,也可以使用 1分析程序的执行结果,将结果填写到空格中。ORG 0000H MOV 30H,#50H MOV RO,#30H MOV A,R0 MOV A,#79H MOV B,#20H DIV AB PUSH BMOV B,#0AH MUL AB POP BADD A,B MOV 30H,A MOV 20H,30H CLR 01H MOV A,20H CPL A RR A SWAP A ADDC A,#0F0H;(A= 50H)RL A;(A=79 HB= 20H);(A=03H B=19H);(A= 1EH B= OOH);(A=37
2、H B=19H);(30H单元的内容=37H);(20H单元的内容=37H);(PSW中P的内容=1 );(PSW中C的内容=o );(A=46H);(A=36H);(PSW中P的内容=0);(PSW中C的内容=1);(A= 6CH );(PSW中P的内容=0);(PSW中C的内容=o )LOOP: AJMP LOOP2、将MCS51内部RAM60Hs65H单元存放的12个16进制数变为ASCII码,放到0090H单元开始的外部RAM中。使用汇编语言编写MAIN :MOV RO,#60HMOV R2,#6MOV DPTR, #0090HHASC:MOV A,R0 ANL A,#0FH ADD
3、A,#0DH MOVC A,A+PC MOVX DPTR,A INC DPTRMOV A,R0 ANL A,#0F0H SWAP A ADD A,#6 MOVC,A+PC MOVXDPTR,A INC RO;屏蔽高四位;查表低四位转换为ASCII码;送如外部RAM;高四位转换为ASCII码INC DPTRDJNZ R2,HASCENDASCTAB:DB 30H 31H 32H 33H 34 H 35H36H 37H 38H 39H DB41H 42H 43H 44H 45H 46H3、某一故障检测系统,当出现故障1时,线路1上出现上升沿;当出现故障2 时,线路2上出现下降沿。没有故障时,线路1
4、为低电平,线路2为高电平。 出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用 MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。4、用MSC1211的TO定时/计数器,设计程序,实现在P1.0输出周期为200ms的占空比为1:1的方波,输出500个方波后停止输出。解:ORG 0000HLJMP MAINORG000BH ;TO 中断服务程序人口地MAINLJMP INT_T0MOV TMOD , #00H; To工作于方0定时MOVTLO , #0CHMOVTHO , #1EH ;设定秒中断周期为1msMOV A, 200 ;设定输出周期为200 msMOV
5、R2, 1000;输出500个方波SETB TROSETB ETOSETB EASETB P1.0SJMP $INT_TO : MOVMOVCPLTLO, #0CHTHO, #1EH ; TO重装时间常数P1.0P1.0位取反DEC R2JZENDP ;若R2为0,则结束程序,否则返主程序继续RETI;返主鬼席ENDP END5、利用MSC1211的A/D构成数据采集系统。使用模拟通道。进行连续数据采 集,采集8次后取得平均值,存放到预先分配好的100个内存单元中,这100 个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(应在适 当的地方加程序注释)。解:#include#inc
6、ludeextern void autobaud(void);/ 声明外部函数extern void bipolar(void);float a100=0,w8=0;int out=0;long result,temp;intj;int AUXinterrupts(void)interrupt6 usingl/ 中断服务程序 (if(PAI=6)/处理 AD 中断(wout+=bipolar();temp=wout;SUMR0=temp&0xff;SUMR1 =(temp8)&0xff;SUMR2=(temp16)&0xff;SUMR3=(temp24)&0xff;if(out=8)SUM=S
7、UMR324+SUMR216+SUMR18+SUMR0; )SUM/=8;aj+=SUM;if(j=100)j=0; )min(void)float dummy;int decimation;decimationg=1440;/ 抽取因子PDCON&=Ox77 ; 打开 ADCACLK=9 ; /模拟采样频率ADMUX=0;使用通道0ADCON0=0x30;/ 内部基准 2.5V ,缓冲器关,BOD 关,PGA=0ADCON1=0x01;双极性,自动稳定模式,偏移增益自校准ADCON2=decimation&Oxff;/写入抽取因子低字节ADCON3= ( decimation8 ) &0x0
8、7; 写入抽取因子高字节AIE=&0x20;autobaud();等待校准for(i=0;i4;i+)(while(!(AIE&0X20)(dummy=ADRESL;)SSCON=0;/清除求和寄存器EAI=1 ;While(1);)6、变量k从。变到150,变化步长为10。对于每一个值,使用整形数算术运算 计算 8*k, k*k*k和(40*k/150F3。这三个值通过MSC1211的D/A转换后同 步输出(均使用电压输出模式)。试编写程序实现。角星: include data unsigned int k,j,i; void main(void)PDCON&=OX48; ADCON0=0X
9、30;DACSEL=6;DACSEL=4;DACL=0X24;DACSEL=5;DACH=0x24;while(1)tDACSEL=0;DAC=0x8000; for(j=0;j100;j+) DAC=0;for(k=0;k151 ;k+=10)DACSEL=1 ;DAC=8*k; DACSEL=2;DAC=k*k*k;DACSEL=3;i=40*k/150;DAC=i*i*i; DACSEL=6;DACL=0Xfc;7、利用MSC1211或8051设计应答方式下的多机通讯程序。通讯参数:晶振 为11.0592MHz, 9600, n, 8, 1。通讯过程如下:主机首先发送从机地址, 从机收到
10、地址后进行比较,如果地址相符,则将从机地址回发给主机作为应 答信号。主机收到从机的地址应答信号后,将内存单元中的120个数据发送 给从机,并进行数据块校验(将各个数据进行异或),若校验正确,则从机发 送00H给主机,否则发送0FFH给主机,主机重新发送数据。(应在适当的 地方加程序注释)解:主机程序如下:ORG 0000HLJMP MAINT ;跳至主程序入口地址ORG 0023H ;串行口中断服务程序入口LJMP INTSTMAINT : MOVSCON , #90H;置工作方式 并允许接收MOVTMOD . #20H:置 T1 工作方式2MOVTH1 , #0FDHMOVTL1 , #0F
11、DHMOVDPTR, #ADDR;设置数据块首址ADDR的地址指针MOV RO , #120 ;设置发送字节数MOVR1 , #00H ;设置校验和的初值MOV R2 , #NAMESETB TB8 ;置位TB8位,作为发送地址桢信息特征SETB TR1SETB EA ; CPU 开中断SETB ES ;允许串行口中断MOV A , R2 ;发送地址桢信息MOV SBUF , ASJMP$ ;中断服务程序INTST : MOVA , TB8 ;判断是发送地址还是数据,若为数据则转LOOPO CJNE A ,01H, LOOPOCLR Tl ;地址桢信息发送完后清发送中断LOOPO : JB R
12、I , LOOP1 ;检查是否是接受中断?若Rl=1则转入接受乙机发 送应答信息CLR TI ;因 RI=0,表明是甲机发送中断数据的中断请CPU响应中断,中断服务程序中应清中断标志MOV A , TB8 ;CJNE A, #01H, LOO3 ;若为发送数据中断则转L00P3继续发送数据LOOP1LJMPCLRENDT ;甲机发送一数据完毕跳至中断返回程序 RI ;清接受中断标志MOV A, TB8 ;判断是发送地址还是数据,若为数据则转 L00P2CJNE A, #01H, L00P4 ;若TB8为0则接受的为乙机数据校验应答MOV A, SBUF;取乙机的应答数据CJNE A, R2,L
13、00P2;若乙机应答信息不是从机地址,则地址传送不正 则转L00P2程序重新发送地址信息,否则清 TB8,发送数据CLRLOOP3 movXTB8A , DPTR ;取下一个数MOVSBUF, A ;启动串行口,发送新的数据XRL , R1MOV 印,AINC DPTR ;修改地址指针DEC RO ;修改发送字节数记数值CJNE RO , #00H, ENDT ;判别120个字节数据都发送完没有。如 没有发送完则跳至中断返回程序。继续发送MOVA , R1MOVSBUF, A;数据全部发送完毕则发送校验和LJMP ENDTLOOP4 MOV A, SBUF ;取乙机的应答数据NE A, #00
14、H, LOOP5 ;若数据发送不正确,则转LOOP5重 tt LLOOP5 :CLRMOV MOVES;全部发送完毕,禁止串行口中断MOVDPTR, #ADDR ;设置数据块首址ADDR的地址指针R0, #120;设置发送字节数R1, #00H;设置校验和的初值LOOP2ENDTLJMPMOVMOVRETIRETIENDLOOP2A, R2;发送地址桢信息SBUF, A从机程序如下:MAINRORGLJMPORG LJMP :MOV0000HMAINR ;跳至主程序入口地址0023H ;串行口中断服务程序入口INTSRSCON, #0B0H;置工作方式2,并允许接收MOV TMOD , #20
15、H;置 T1 工作方式 2MOV TH1, #0FDHMOVTL1 , #0FDHMOV DPTR , #ADDR ;设置数据块接收首址为ADDRMOVRO , #120 ;设置接收字节数MOVR2, #NAMEMOVR1 , #00H ;设置校验和的初值SETB RB8 ;置位RB8位,作为接受地址信息特征SETBTR1SETBEA ; CPU 开中断SETBES ;允许串行口中断SJMP $;中断服务程序INTSR : MOVCJNE CLR MOVXRL JZ LJMPLOOP : CLRCLRMOVMOVLJMPLOOPO: JB送的数据A, RB8 ;判断是接收地址还是数据,若为数据
16、则转LOOPOA , 01H, LOOPORI ;地址桢信息接受完后清接收中断A , SBUFA , R2LOOP ;若地址相符则转LOOP,否则中断返回ENDRSM2RB8A , R2SBUF, A;想主机发送从机地址ENDRRI , LOOP1 ;检查是否是接受中断?若Rl=1则转入接受甲机发CLR TI ;因RI=0 ,表明是乙机发送中断数据的中断请求。CPU响应 中断,在中断服务程序中应清中断标志LJMP ENDR ;甲机发送一数据完毕跳至中断返回程序LOOP1 : CLR RI ;清接DECJZMOVMOVXR0LOOP2 ; A, DPTR数据未接收完则中断返;取甲机发送的数据XR
17、LMOVLOOP2 : MOVA,R1 R1, A A,:取甲机发送的校验XRLJZA , R1 RIGHT受中断标志若接收完则转LOOP2 ,校验RIGHT : MOVMOVA, #00HSBUF , ALJMP ENDRWRONG : MOV A , #0FFHMOV SBUF , AMOV DPTR , #ADDR ;设置数据块接收首址为ADDRMOV RO , #120 ;设置接收字节数LJMP ENDRENDR : RETIEND单片机原理及应用1、分析程序的执行结果,将结果填写到空格中。ORG 0000HMOV 30H,#50HMOV R0,#30HMOV A,R0MOV A,#7
18、9HMOV B,#20HDIV ABPUSH BMOV B,#0AHMUL ABPOP BADD A,BMOV 30H,ALOOP: AJMP LOOP;(A50H);(A=79H B=;(A03H20H)B= 19H );(A 1E B= OOH );(A37H B= 19H);(30H单元的内容=37H)2、MCS51内部RAM50Hs55H单元存放的12个16进制数变为ASCII码,放 到2800H单元开始的外部RAM 中。MOV A,R0 ANL A,#0FH ADD A,#0DH MOVC A,A+PC MOVX DPTR,A INC DPTR MOV A,R0 ANL A,#0F0
19、H SWAP A ADD A,#6 MOVC,A+PC MOVX DPTR,A INC ROMAIN:MOV R0,#50HMOV R2,#6MOV DPTR, #2800HHASC:;屏蔽高四位;查表低四位转换为ASCII码;送如外部RAM扃四位转换为ASCII码INC DPTRDJNZ R2,HASCENDASCTAB:DB 30H 31H 32H 33H 34 H 35H36H 37H 38H39H DB41H42H 43H 44H 45H 46H3、编制四个十六进制单字节数相加后求平均的程序。假设4个16进制的单字节分别为a, b, c, d,计算结果方到e中#include #def
20、ine uchar unsigned charvoid main(void)(uchar a,b,c,d3e;e=(a+b+c+d)/4;while(1);)4、用8031的TO定时/计数器,设计程序,实现在P1.0输出50ms的方波,输出 100个方波后停止输出。#include #define uchar unsigned charuchar a;void main(void)(TMOD=0X01;TL0=0XB0;TH0=0X3C;EA=1;ET0=1;TR0=1;while(1) (if(a=100) (EA=0;TR0=0; void timerO(void) interrupt 1
21、(TL0=0XB0;TH0=0X3C;epi p1.0;a+;)5、甲单片机利用方式1将内部RAM30Hs37H单元的ASCII码发送到乙机编制甲 机发送和乙机接收的程序(加奇校验)。A机发送程序设计ST:MOV TMOD,#20HMOV TL1 ,#0E8HMOV TH1,#0E8HSETB TR1MOV SCON ,#50HMOV RO,#30HMOVR1,#08HLOOP:MOV A,R0CALL FSINC RODJNZR1,LOOPRETFS:MOV C,PCPLCMOV ACC.7,CMOV SBUF AWAIT:JNBTI,WAITCLR TlRETB机的接受程序设计 接受串口发
22、来的程序,假设存放在30H37H中ST:MOV TMOD,#20HMOV TL1 ,#0E8HMOV TH1,#0E8H SETB TR1MOV SCON ,#50HMOV R0,#30HMOVR1,#08H LOOP:CALL JSJNC ERRORMOV R0 , AINC RODJNZR1,LOOPRETERROR:;出错处理,如返回出错信息等RETJS:JNB RI JSCLR RIMOV A, SBUFMOV PCANLA,#7FHRET6、试用8031和8155实现键盘和LED动态显示。画出原理示意图并编制键盘 扫 描程序和LED动态显示程序(16个键的键盘扫描和6位LED显示)。
23、键盘扫描子程序:#include #include #define uchar unsigned char#define uint unsigned int uchar num,i;uint temp;void main(void)(while(1)(keych();)void keych()for(i=0;iv4;i+)ftemp=0xfe; temp= _crol_(temp, i); P0=temp; temp=P0; temp=temp&OxfO;if(temp!=OxfO) delay();if(PO&OxfO)!=OxfO) switch(temp)(case 0x70: jpch
24、;break; case OxbO: jpch;break; case OxdO: jpch;break; case OxeO: jpch;break;Void jpch(void)(按键扫描处理程序)LED动态扫描子程序假设各端口都已初始化#include Unsigned char duanx=0x3f,0x06,0x5b,0x4f,0x66)0xbdUnsigned char weix=0x80,0x40,0x20,0x10,0x80,0x40Void main(void)lnit();初始化各端口P1=0While(1)(Unsigned char;For (i=0;i6,i+)(P0
25、=duanxi;P1+P0=weixi;Delay();P1=0;P0=0;)i=0;p1=0)5、利用8031和8位A/D (ADC0809)构成数据采集系统。每隔20ms采集通道。的 一次数据,将采集的数据存放在30H的内部RAM中。画出原理示意图,写出较完整 的程序清单。(提示:需要用定时器和外部中断)。5、MOV 25H , #39HCLR2AH;(25H)=(B)CPL2CH;(25H)=(00101001 B)SETB2EH;(25H)=(01101001MOV C, 28H;( PSW 中 C 的内容=1 )1、MCS51内部RAM 40Hs60H单元存放着有符号16进制数,将其
26、中能被2整除 的数,存放到0090H单元开始的外部RAM中。使用汇编语言编写角星:ORG0000HJMPSTART:MOVMOVMOVMOVLOOPOMOVMOVDIVSTARTSP, #60HDPTR, #0090HR0, #40HR1, #21A , R0B, #2ABMOVCJNZMOVR2, BR2, #0, LOOP1 ;余数为。则继续,不为0则转移A, R0LOOP1:MOVINCINCDJNZENDDPTR,ADPTRR0R1, LOOPO2、用MSC1211的T1定时/计数器,定时0.1S中断,使P1 口的8个发光二极 管每 隔1S循环点亮。设系统主频为6MHZO角翠:ORG
27、0000HLJMP MAINORG 001BHLJMPT1-ISR;转主程序;T1中断服务程序入口地MAIN : MOVSP, #60HMOVP1,#01HMOVTMOD , #10HMOVTL1 , #B0HMOVTH1 , #3CHSETBTR1SETBET1SETBEASJMP$T1JSR:MOV TL1,#B0HMOV TH1,#3CHMOVA,P1RLAMOVP1,A;设置堆栈指 设置P1.1发光;T1初始化启动TO计数;允许T0中断;CPU开中断;等待;P1 循环左移ORG01 OOHEXIT: RETIEND3、设有甲、乙两台单片机,以工作方式3进行串行通讯,设晶振为11.059
28、2MHz, 波特率为9600,甲机将内存单元中的120个数据作补偶校验后发送给乙机,乙机 对接收到的数据进行奇偶校验,若校验正确,则从机发送00H给甲机,甲机 继续发 送数据,校验不正确,则发送OFFH给甲机,甲机重新发送原数据,编写乙机的接 收程序。(应在适当的地方加程序注释)解:ORG 0000HAJMP MAIN ORG 0023H LJMP SE2JNT MAIN:MOV SP,#60HMOV TMOD #20HMOV TH1,#0FDH ;设置波特率为 9600bpsMOV TL1,#0FDHMOV SCON,#90H ;串行工作方式3 ,允许接收MOV DPTR,#2000H;接收数据区MOV R1,#120SETB TR1SETB EASETB ESSJMP$;等待接收中断SE2JNT:JB RI , LOOPACLRT1LOOPALJMP ENDRCLR RIMOV A,SBUFMOV C,P;奇偶校验JC LOOP1 ;如8位数是奇,则转LOOP1再检测RB8位ORLGRB8;如8位数为偶,再检测RB8位,RB8-1,则9位数据为奇,补偶JC LOOP2 ;错,转 LOOP2LJMP LOOP3 ;补偶正确,转 LOOP3LOO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论