1、单片机原理及应用 考试时间:2019-01-19 18:0020:00 考试地点:第6教学楼 122考试题目形式 一.选择填空题选择填空题(每小题2分,共30分)二.简答题:(每小题简答题:(每小题5分,共分,共20分,分,4小题)小题)三.程序分析题程序分析题(共26分,5小题)四.编程题(共24分,3小题)开始RET设置起始地址长度计数器内存取数是否为$数据送外存指针调整是否送完数据1程序:MOV DPTR,#2100H ;设置起始地址 MOV R0,0 ;设置当前所在地址SCH_PRO0:MOV DPL,R0 ;设置当前地址 MOVX A,DPTR ;取出当前地址的内容 INC R0 ;
2、地址指针加1 CJNE A,#24H,SCH_PRO1 ;判断当前地址内容是否为“$”MOV DPTR,#1500H ;是则存储到1500H单元中并结束 MOVX DPTR,A RETSCH_PRO1:CJNE R0,32,SCH_PRO0;判断当前是否已取完;并结束 RET系统时钟为12MHz时,延时子程序 ORG 2000H 需机器周期数 nn EQU 40H ;DELAY:MOV A,nn ;1LOOP:DEC A ;1 NOP ;1 NOP ;1 NOP ;1 NOP ;1 NOP ;1 JNZ LOOP ;2 RET ;2已知查表程序,内部RAM的(27H)=09H,BCD_LED:
3、MOV A,27H MOV DPTR,#TAB MOVC A,A+DPTR CPL A ;MOV 27H,A RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H ;LED字形表 92H,82H,0F8H,80H,90H串行接口接收,晶振频率为12MHz,以方式1进行串行数据通信,其波特率为1200。B机接收程序:Recieve:MOV TMOD,#20H ;定时器T1工作于模式2 MOV TH1,#0E6H ;设置波特率为1200的计数初值 MOV TL1,#0E6H SETB TR1 MOV SCON,#50H ;串行接口工作于工作方式1,允许接收 LOOP:JNB RI,L
4、OOP ;等待接收数据 MOV A,SBUF ;CLR RI RET 通信程序,设fosc=11.0592MHz:#include“reg51.h”#include“string.h”char s=“MCS-51 Serial Communication Bus.”;main()unsigned char a,b=6;TMOD=0 x20;SCON=0 x50;/*SM0=SM2=0,SM1=1,REN=1*/TH1=0 xfa;TL1=0 xfa;TR1=1;a=strlen(s);for(;ba;b+)SBUF=s b;while(!TI);TI=0;6 产生周期为40mS的等宽方波脉冲。
5、#include sbit P1_=P14;void TimerInt(void)interrupt 3 using 1P1_4=!P1_4;TH1=-(20000/256);TL1=-(20000%256);main()SP=0 x60;P1_4=0;TMOD=0 x11;TH1=-(20000/256);TL1=-(20000%256);EA=1;ET1=1;TR0=0;TR1=1;dowhile(1);、intldata、IDATA、PDATA、BDATA20us查询方式定时源程序如下:查询方式定时源程序如下:ORG 0000HLJMP MAINORG 0030HMAIN:MOVTMOD
6、,#02HM O VI E,#0 0 HSETBTR0 MOVTH0,#246MOVTL0,#246LOOP:JNB TF0,LOOPCPL P1.0CLRTF0LJMPLOOPEND中断方式定时源程序:中断方式定时源程序:ORG 0000HLJMP MAINORG 000BHCPL P1.0RETIORG 0030HMAIN:MOVSP,#60HMOVTMOD,#02HM O VT H 0,#2 4 6M O VT L 0,#2 4 6M O VI E,#8 2 HSETBTR0SJMP$初值自动重载装载计数初值中断允许启动计数器用语言写:#include sbit P1_=P1;void
7、TimerInt()interrupt P1_=!P1_;main()SP=0 x60;P1_=0;TMOD=0 x;TH1=256-10;TL1=-10;EA=1;ET0=1;TR0=0;dowhile(1);如果查询方式:#include sbit P1_=P1;main()SP=0 x60;P1_=0;TMOD=0 xH;TH1=256-10;TL1=-10;EA=1;ET0=1;TR0=0;while(1)if(TF0)P1_=!P1_;TF0=0;主程序如下:主程序如下:ORG 0000HLJMP MAINORG 000BHLJMP T0-IPGORG 0030HMAIN:MOVSP
8、,#60HMOVTMOD,#02HMOVTH0,#236MOVTL0,#236MOVR0,#5MOVI E,#8 2 HSETBTR0SJMP$中断服务程序:中断服务程序:T0-IPG:DJNZ R0,BACKMOV R0,#5SETB P1.0RETIBACK:CLR P1.0 RETI200us40us设定堆栈设定堆栈初始化初始化TH0=TL0=236,TMOD=02H,计数器计数器R0=5中断允许,计数启动中断允许,计数启动等待中断等待中断主程序主程序中断服务程序中断服务程序R0=R0-1 0R0=5,P1.0=1RETIYNP1.0=0include sbit P1_0=P10;uns
9、igned char nn;main()SP=0 x60;P1_0=0;TMOD=0 x02;TH1=-20;TL1=256-20;EA=1;ET0=1;TR0=0;nn=5;dowhile(1);void TimerInt(void)interrupt 1 nn=nn-1;if(nn=0)P1_0=1;nn=5;else P1_0=0;用语言写:已知时钟频率为6MHz,P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。中断方式定时源程序:中断方式定时源程序:D10MS EQU 30HD10MS EQU 30H D1S EQU 31H D1S EQU 31HORG
10、 ORG 0000H 0000HLJMP LJMP MAIN MAINORG ORG 000BH ;T0INT000BH ;T0INT LJMP T0INT LJMP T0INT ORG ORG 0030H0030HMAINMAIN:MOVMOVSP,#60HSP,#60HMOVMOVTMODTMOD,#02H#02HMOVMOVTH0TH0,#256-250;0.5ms#256-250;0.5msMOVMOVTL0TL0,#256-250#256-250 MOV MOVIEIE,#82H#82HCLR P1.0CLR P1.0 CLR P1.1 CLR P1.1SETBSETBTR0TR0
11、MOV D10MS,#0MOV D10MS,#0MOV D1S,#0MOV D1S,#0SJMPSJMP$T0INT:INC D10MST0INT:INC D10MS MOV A,D10MS MOV A,D10MS CJNE A,#20,T0INT1 CJNE A,#20,T0INT1 MOV D10MS,#0 MOV D10MS,#0 SETB P1.0 SETB P1.0 CLR P1.0 CLR P1.0 INC D1SINC D1S MOV A,D1S MOV A,D1S CJNE A,#60,T0INT1 CJNE A,#60,T0INT1 MOV D1S,#0 MOV D1S,#0
12、 SETB P1.1SETB P1.1 CLR P1.1 CLR P1.1T0INT1:RETIT0INT1:RETI用语言:include sbit P1_0=P10;sbit P1_1=P11;unsigned char d10ms,d1s;main()SP=0 x60;P1_1=0;P1_0=0;TMOD=0 x02;d10ms=0,d1s=0;TH1=-250;/0.5ms TL1=256-250;EA=1;ET0=1;TR0=0;dowhile(1);void TimerInt(void)interrupt 1 d10ms+;if(d10ms=20)d10ms=0;d1s+;P1_0
13、=1;P1_0=0;if (d1s=60)P1_1=1;P1_1=0;d1s =0;8031INT0I/O8031独立式按键电路()()查询方式I/O中断方式+5VINT1&四、单片机矩阵键盘接口和键功能的实现四、单片机矩阵键盘接口和键功能的实现行列式键盘行列式键盘(如图如图8.1.4所示所示)按键识别有两种方法:行扫描法和线反转法按键识别有两种方法:行扫描法和线反转法 1 1、键盘接口处理的内容、键盘接口处理的内容(1 1)键扫描)键扫描首先是判定有没有键被按下首先是判定有没有键被按下第一行第二 行第三行第四行第一列第四列第三列第二列P1_0P1_1P1_2P1_3+5V+5V0123456
14、789ABCDEFP1_4P1_5P1_6P1_7先经输出口向所有列线输出低电平,然后再输入各行线状态先经输出口向所有列线输出低电平,然后再输入各行线状态2)软件消抖是利用延时来跳过抖动过程 3)判断被按键的位置判断被按键的位置(4 4)键值计算)键值计算unsigned char code unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;un
15、signed char Count,d1,d2,d3,d4;unsigned char Count,d1,d2,d3,d4;void display(void)void display(void)P2&=0 xf0;P2&=0 xf0;/关断位选信号关断位选信号P1=tabled1;P1=tabled1;/送显示数据送显示数据P2_0=1;P2_0=1;/选中第一个数码管选中第一个数码管delay();delay();/延时延时P2&=0 xf0;P2&=0 xf0;/关断位选信号关断位选信号P1=tabled2;P1=tabled2;/送显示数据送显示数据P2_1=1;P2_1=1;/选中第
16、二个数码管选中第二个数码管delay();delay();/延时延时P2&=0 xf0;P2&=0 xf0;/关断位选信号关断位选信号P1=tabled3;P1=tabled3;/送显示数据送显示数据P2_2=1;P2_2=1;/选中第三个数码管选中第三个数码管delay();delay();/延时延时P2&=0 xf0;P2&=0 xf0;/关断位选信号关断位选信号P1=tabled4;P1=tabled4;/送显示数据送显示数据P2_3=1;P2_3=1;/选中第四个数码管选中第四个数码管delay();delay();/延时延时P1=0;P1=0;/关段码关段码P2&=0 xf0;P2&
17、=0 xf0;/关位码关位码 void delay(void)unsigned int i;for(i=0;i2000;i+);void main(void)while(1)display();/其他工作其他工作 程序设计程序设计1、假定甲、乙机进行串行数据通信,其波特率为、假定甲、乙机进行串行数据通信,其波特率为1200。甲机将内部。甲机将内部RAM 40H4FH单元的内容传送到乙机外部单元的内容传送到乙机外部RAM 1000H100FH单元,请编程实现。单元,请编程实现。ORG 0000HLJMPMAINORG0023HLJMPT_PGORG0030HMAIN:MOV SP,#60HMOV
18、 TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV PCON,#00HMOV SCON,#40H MOV R0,#40HMOV R1,#10HSETB EASETB ES假设假设fsoc=6MHz,串行工作方式,串行工作方式2,smod=0,则计数初值为:则计数初值为:X=256-6*106*20/(384*1200)=256-13=FFH+1-13=0F3HSETB TR1MOV A,R0CLR TIMOV SBUF,A SJMP$T_PG:DJNZ R1,NEXTCLR ESCLR TR1LJMP BACKNEXT:INCR0MOVA,R0CLR TIMOVSB
19、UF,ABACK:RETIsmod=0 方式方式1,REN=0中断中断允许允许取数取数发送发送甲机发送程序:甲机发送程序:程序设计程序设计1、假定甲、乙机进行串行数据通信,其波特率为、假定甲、乙机进行串行数据通信,其波特率为1200。甲机将内部。甲机将内部RAM 40H4FH单元的内容传送到乙机外部单元的内容传送到乙机外部RAM 1000H100FH单元,编程实现。单元,编程实现。ORG 0000HLJMPMAINORG0023HLJMPR_PGORG0030HMAIN:MOV SP,#60HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV PCON,#00HMOV SCON,#50H MOV DPTR,#1000HMOV R1,#10HSETB EASETB ESSETB TR1CLR RISJMP$R_PG:MOVA,SBUFMOVDPTR,ACLR RIINC DPTRDJNZ R1,BACKCLR ESCLR TR1BACK:RETIsmod=0 方式方式1,REN=1中断中断允许允许接受接受送外存送外存乙机接受程序:乙机接受程序: