单片机例题范例

合集下载

单片机例题

单片机例题

1.P3.0按键控制P1.0灯亮灭2.按键1数码管显示1,按键2数码管显示2,按键3数码管显示3,按键4数码管显示43.用两位数码管显示一个十进制数,变化范围为00-60,开始时显示00,按键S1每按下一次,数值加1;按键S2每按下一次,数值减1;按键S3每按下一次,数值归零。

4.矩阵键盘,数码管显示各个序号5.P3.0控制灯全亮,P3.1全灭。

中断口0控制流水灯向下,中断口1控制流水灯向上6.流水灯7.数码管显示1238.数码管三位分别从0显示到F9.数码管从0显示到999910.中断控制LED灯前四盏灭和后四盏亮11.中断口1控制l ed灯闪烁12.定时器0延时1S控制第一盏灯闪烁13.中断口0控制数码管从0到60显示14.按键KEY1进行调分、调时状态切换,进入调整状态时,时钟停止走动,这时按下按键KEY2可实现分、时的调整。

按键使用外部中断来产生。

15.串口初始化16.中断,定时总结1.P3.0按键控制P1.0灯亮灭#includ e<reg51.h>#d efine LED P1sbit Key=P3^0;//按键定义void Delayxms(unsigned int xms){ unsigned int i,j;for(i=xms;i>0;i--){for(j=110;j>0;j--);}}void main(){Key=1;whil e(1){if(Key==0){Delayxms(10);if(!Key){LED=~LED;}}}}2.按键1数码管显示1,按键2数码管显示2,按键3数码管显示3,按键4数码管显示4#includ e<reg51.h>#d efine LED P1unsigned char cod e led[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; sbit Key1=P3^0;sbit Key2=P3^1;sbit Key3=P3^2;sbit Key4=P3^3;void display(unsigned char num){P2=0xf0;P0=l ed[num];}void Delayxms(unsigned int xms){unsigned int i,j;for(i=xms;i<0;i--){for(j=110;j>0;j--);}}unsigned char Key_scan(){unsigned char KeyValue;P3 |=0xf0;if(Key1==0){Delayxms(10);if(!Key1){KeyValue=1;whil e(!Key1);}}if(Key2==0){Delayxms(10);if(!Key2){KeyValue=2;whil e(!Key2);}}if(Key3==0){Delayxms(10);if(!Key3){KeyValue=3;whil e(!Key3);}}if(Key4==0){Delayxms(10);if(!Key4){KeyValue=4;whil e(!Key4);}}return KeyValue;}void main(){whil e(1){display(Key_scan());}}3.用两位数码管显示一个十进制数,变化范围为00-60,开始时显示00,按键S1每按下一次,数值加1;按键S2每按下一次,数值减1;按键S3每按下一次,数值归零。

单片机 11道编程例题及答案

单片机  11道编程例题及答案

1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。

试编程实现。

ORG 0030H MOV R0,#inbuf MOV R1,#outbuf MOV R4,#10HLOOP:MOV A,@R0 ; 从内部RAM取数 CJNE A,#0DH,LL ;是否为回车符CRSJMP STOP ;是转停止传送 LL: MOVX @R1,A ;不是则传送到外部RAMINC R0 INC R1 DJNZ R4,LL;沒传送完则循环 STOP: SJMP $2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。

编程实现在表中找出最小数。

(3AH存放在运行程序时的最小的数)ORG 0030HMOV R0,#listMOV A,@R0 ;取第一个正数LOOP: INC R0 ;指向下一个正数MOV 3AH,@R0CJNE A,3AH,CHK ;前一个数与后一个数比较CHK: JC LOOP1 ;前一个数小,则转MOV A,@R0 ;前一个数大,取后一个数LOOP1: XCH A,3AHCJNE A,#0FFH,LOOPXCH A,3AH ;取最小数MOV 3BH,A SJMP $3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。

若X为正奇数,Z =X+Y;若X为正偶数,Z =X∨Y;若X为负奇数,Z =X∧Y;若X为负偶数,Z =X⊕Y。

分析:负数:第7位为1,正数:第7位为0 奇数:第0位为1,偶数:第0位为0 ORG 0000H MOV A,20H CLR C RL A JC FS ;移到负数处处理RR A RR A ;第0位移到C 再判定一下是不是1 JC ZJS ;到正奇数处MOV A,20H ORL A,21H MOV 22H,A SJMP OKZJS: MOV A,20H ADD A,21H MOV 22H,A SJMP OKFS: MOV A,20H CLR C RR A JC FJS ;第0位是1,移到正奇数处理MOV A,20H XRL A,21H MOV 22H,A SJMP OKFJS: MOV A,20H ANL A,21H MOV 22H,A OK: END4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。

单片机原理复习例题 (全答案)

单片机原理复习例题 (全答案)

课堂练习一、判断改错题1、XCHD A,@R3 ( F )2、CPL R0 ( F ) 只能用于累加器A3、MOV R4, 0E0H ( T )4、PUSH DPTR (F ) 只能是直接地址5、MOV @R1,R2 ( F )寄存器不能互相赋值6、SUBB B, 56H (F )不能是B7、XCH A,#50H ( F ) 只能是地址或寄存器8、ORL P1,A ( T )9、MOV @DPTR,A ( F ) 应该是MOVX10、TAB DB 01110010B,16H,45,’8’,’A’(T )二、程序分析题1、执行下列程序段中第一条指令后,(P1.7)=_P1.7__;执行第二条指令后,(P1.3)=___1_____。

ANL P1,#73HORL P1,#38H2、下列程序段执行后,(A)=___0DH __,(B)=__11H____。

MOV A,#0FBHMOV B,#12HDIV AB3、已知(SP)=09H,(DPTR)=4567H,在执行下列指令后,(SP)=_0BH_____,内部RAM(0AH)=__67H____,(0BH)=_45H___。

PUSH DPLPUSH DPH4、下列程序段执行后,(R0)=_7EH _,(7EH)=_-1 _,(7FH)=_ 3FH _。

MOV R0,#7FHMOV 7EH,#0MOV 7FH,#40HDEC @R0DEC R0DEC @R05、下列程序段汇编后,从3000H开始的各有关存储单元的内容将是什么?(11分)ORG 3000HTAB1 EQU 3234HTAB2 EQU 4000HDB “START”DW TAB1, TAB2, 9000H答:‘S’,’T’,’A’,’R’,’T’,32H,34H,40H,00H,90H,00H一、选择题第一章微型计算机基础知识1、十六进制数A到F和对应的ASCII码的差为(A )A. 37HB. 30HC. 40HD. 47H2、CPU是单片机的核心部件,它包括运算器和(A )A. 控制器B. 数据存储器C. 程序存储器D. I/O端口第二章CPU 结构1、ALE管脚可以作为低八位地址的锁存控制信号,也可以作为其他芯片的时钟信号。

单片机实验程序例题

单片机实验程序例题

4.30H起连续5个16进制数,转换成BCD码,按高低放入40H起10个字节中ORG 700HEXIBCD:MOV B,#64HDIV ABMOV @R1,AINC R1MOV A,BMOV B,#0AHDIV ABSW AP AADD A,BMOV @R1,AINC R1RETMOV R0,#30HMOV A,@R0MOV R1,#40HMOV R2,#5LOOP:MOV A,@R0INC R0LCALL HEXIBCDDJNZ R2,LOOPSJMP $END30H :FA 12 22 43 5040H:02 50 00 18 00 34 00 67 00 80 2.从30H起五个数,BCD码转化成16进制,放入40HORG 500HMOV R0,#30HMOV R1,#40HMOV R3,#5LOOP:MOV A,@R0SWAP AANL A,#0FHRL AMOV R2,ARL ARL AADD A,R2MOV @R1,ACLR AMOV A,@R0ANL A,#0FHADD A,@R1MOV @R1,ASJMP NEXTNEXT:INC R0INC R1DJNZ R3,LOOPSJMP $END30H: 80 11 22 43 9040H:50 0B 16 2B 5A1个十六进制传换成asc码HEXASC:ORG 100H ANL A, #0FH;入参数CJNE A, #6AH VVV VVV: JC SHV;ADD A, #37HSJMP EXITSHV: ADD A,#30HEXIT RET; 第一题:11H+22HORG 100HMOV A #11H 0100H 74H 11H MOV B #22H 0102H 75H F0H 22H ADD A B 0105H 25H F0H SJMP $ 0107H 80运行结果:33H把30H起的5个字节,按照高低顺序依次存入40H后的10个字节中ORG 0100H INC R1 ADD A, #30H MOV R0, #30H MOV @R1,A SJMP NEXT1 MOV R1,#40H INC R0 NEXT:ADD A, #37H MOV R2,#5 INC R1 NEXT1:RET LOOP:MOV A, @R0 DJNZ R2,LOOP ENDSWAP A SJMP $LCALL ZL1 ZL1:ANL A,#0FHMOV @R1,A CJNE A ,#0AH,LOOPMOV A, @R0 SJMP NEXTLCALL FIRST LOOP1:JNC NEXT将30H(一个数)16进制,转换成BCD码按高低-高低存入40HORG 600HMOV A 30HMOV B #64HDIV ABMOV 40H AMOV A BMOV B #0AHDIV ASWAP AADD A BMOV 41H ASJMP $END 30H起10个字节,把最大的存在40H,(最小的存在40H JNC改成JC即可)ORG 200HMOV R0,#30HMOV R1,#10MOV 40H,#00LOOP:MOV A,@R0CJNE A,40H,LOOP1SJMP NEXTLOOP1:JNC FIRSTSJMP NEXTFIRST:MOV 40H,ANEXT:INC R0DJNZ 1,LOOPSJMP $END30起5个字符,和放入R2,R3ORG 300HMOV R7,#5MOV R2,#0MOV R3,#0MOV R0,#30HLOOP:MOV A,R3ADD A,@R0MOV R3,ACLR AADDC A,R2 DJNZ R7,LOOP MOV R2,A STOP:LJMP STOP INC R0 END从内部RAM的31H单元开始存放一组8位带符号数,字节个数在30H中,请编写程序统计出其中正数,零和负数的数目,并把统计结果分别存入20H、21H、22H三个单元中,加上必须的伪指令,并加以注释。

单片机程序100范例+详细注释

单片机程序100范例+详细注释

100例程序设计范例汇总第一章 (4)【实例1】使用累加器进行简单加法运算: (4)【实例2】使用B寄存器进行简单乘法运算: (4)【实例3】通过设置RS1,RS0选择工作寄存器区1: (4)【实例4】使用数据指针DPTR访问外部数据数据存储器: (4)【实例5】使用程序计数器PC查表: (4)【实例6】IF语句实例: (4)【实例7】SWITCH-CASE语句实例: (4)【实例8】FOR语句实例: (4)【实例9】WHILE语句实例: (5)【实例10】DO...WHILE语句实例: . (5)【实例11】语句形式调用实例: (5)【实例12】表达式形式调用实例: (5)【实例13】以函数的参数形式调用实例: (5)【实例14】函数的声明实例: (5)【实例15】函数递归调用的简单实例: (5)【实例16】数组的实例: (6)【实例17】指针的实例: (6)【实例18】数组与指针实例: (6)【实例19】P1口控制直流电动机实例 (6)第二章 (8)【实例20】用74LS165实现串口扩展并行输入口 (8)【实例21】用74LS164实现串口扩展并行输出口 (10)【实例22】P0I/O扩展并行输入口 (12)【实例23】P0I/O扩展并行输出口 (12)【实例24】用8243扩展I/O端口 (12)【实例25】用8255A扩展I/O口 (14)【实例26】用8155扩展I/O口 (19)第三章 (26)【实例29】与AT24系列EEPROM接口及驱动程序 (26)【实例30】EEPROM(X5045)接口及驱动程序 (30)【实例31】与铁电存储器接口及驱动程序 (33)【实例32】与双口RAM存储器接口及应用实例 (35)【实例33】与NANDFLASH(K9F5608)接口及驱动程序 (35)第四章 (43)【实例34】独立键盘控制 (43)【实例35】矩阵式键盘控制 (44)【实例36】改进型I/O端口键盘 (46)【实例37】PS/2键盘的控制 (49)【实例39】段数码管(HD7929)显示实例 (54)【实例40】16×2字符型液晶显示实例 (55)【实例41】点阵型液晶显示实例 (61)【实例42】LCD显示图片实例 (63)第五章 (70)【实例43】简易电子琴的设计 (70)【实例44】基于MCS-51单片机的四路抢答器 (71)【实例45】电子调光灯的制作 (76)【实例46】数码管时钟的制作 (81)【实例47】LCD时钟的制作 (96)【实例48】数字化语音存储与回放 (103)【实例49】电子标签设计 (112)第六章 (120)【实例50】指纹识别模块 (121)【实例51】数字温度传感器 (121)第七章 (124)【实例53】超声波测距 (124)【实例54】数字气压计 (125)【实例55】基于单片机的电压表设计 (132)【实例56】基于单片机的称重显示仪表设计 (133)【实例57】基于单片机的车轮测速系统 (136)第八章 (138)【实例58】电源切换控制 (138)【实例59】步进电机控制 (140)【实例60】单片机控制自动门系统 (141)【实例61】控制微型打印机 (144)【实例62】单片机控制的EPSON微型打印头 (144)【实例63】简易智能电动车 (145)【实例64】洗衣机控制器 (149)第九章 (152)【实例65】串行A/D转换 (152)【实例66】并行A/D转换 (153)【实例67】模拟比较器实现A/D转换 (154)【实例68】串行D/A转换 (155)【实例69】并行电压型D/A转换 (156)【实例70】并行电流型D/A转换 (156)【实例71】2I C接口的A/D转换 (157)【实例72】2I C接口的D/A转换 (161)【实例73】单片机间双机通信 (164)【实例74】单片机间多机通信方法之一 (166)【实例75】单片机间多机通信方法之二 (171)【实例76】PC与单片机通信 (176)【实例77】红外通信接口 (178)第十一章 (180)【实例79】单片机实现PWM信号输出 (180)【实例80】实现基于单片机的低频信号发生器 (182)【实例81】软件滤波方法 (183)【实例82】FSK信号解码接收 (186)【实例83】单片机浮点数运算实现 (187)【实例84】神经网络在单片机中的实现 (192)【实例85】信号数据的FFT变换 (194)第十二章 (198)【实例86】2I C总线接口的软件实现 (198)【实例87】SPI总线接口的软件实现 (200)【实例88】1-WIRE总线接口的软件实现 (205)【实例89】单片机外挂CAN总线接口 (207)【实例90】单片机外挂USB总线接口 (210)【实例91】单片机实现以太网接口 (214)【实例92】单片机控制GPRS传输 (221)【实例93】单片机实现TCP/IP协议 (223)第十三章 (229)【实例94】读写U盘 (229)【实例95】非接触IC卡读写 (234)【实例96】SD卡读写 (238)【实例97】高精度实时时钟芯片的应用 (242)第十四章 (247)【实例98】智能手机充电器设计 (247)【实例99】单片机控制门禁系统 (248)第一章【实例1】使用累加器进行简单加法运算:MOV A,#02H ;A←2ADD A,#06H ;A←A+06H【实例2】使用B寄存器进行简单乘法运算:MOV A,#02H ; A←2MOV B,#06H ; B←6MUL AB ; BA←A*B=6*2【实例3】通过设置RS1,RS0选择工作寄存器区1:CLR PSW.4 ; PSW.4←0SETB PSW.5 ; PSW.5←1【实例4】使用数据指针DPTR访问外部数据数据存储器:MOV DPTR, #data16 ; DPTR←data16MOVX A, @ DPTR ; A←((DPTR))MOVX @ DPTR, A ; (DPTR)←A【实例5】使用程序计数器PC查表:MOV A, #data ;A←dataMOVC A, @ A+DPTR ; PC←(PC)+1 ,A←((A)+(PC)) 【实例6】if语句实例:void main(){ int a,b,c,min;printf("\n please input three number:");scanf("%d%d%d ",&a,&b,&c);if(a<b&&a<c) printf("min=%d\n",a );else if(b<a&&b<c) printf("min=%d\n",b);else if(c<a&&c<c) printf("min=%d\n",c);else printf("There at least two numbers are equal\n");}【实例7】switch-case语句实例:void main(){ int num; printf("input one number:");scanf("%d",& num);switch(num){ case 1: printf("num =%d\n", num);break;case 2: printf("num =%d\n", num);break;case 3: printf("num =%d\n", num);break;case 4: printf("num =%d\n", num);break;default: printf("The number is out of the range\n", num);}}【实例8】for语句实例:void main(){ for(int a=10;n>0;a --)printf("%d",a);}【实例9】while语句实例:void main(){ int i=0;while(i<=10) i++;}【实例10】do…while语句实例:void main(){ int i=0;do{ i++;}while(i<=10);}【实例11】语句形式调用实例:void main(){ int i=0; while(i<=10) i++; ……Sum(); /*函数调用*/}【实例12】表达式形式调用实例:void main(){ int a,b,i=0; while(i<=10) i++; ……i=4*Sum(a,b); /*函数调用*/}【实例13】以函数的参数形式调用实例:void main(){ int a,b,c,i=0; while(i<=10) i++; ……i= max(c,Sum(a,b)); /*函数调用*/ }【实例14】函数的声明实例:void main(){ int max(int x,int y); /*函数的声明*/ int a,b,c,i=0; while(i<=10) i++; ……i= max(c,Sum(a,b)); /*函数调用*/ }【实例15】函数递归调用的简单实例:void fun(){ int a=1, result,i;for(i=0;i<10;){ i=a+I;result = fun(); /*函数调用*/}return result;}【实例16】数组的实例:void main(){ char num[3] [3]={{ '','#',''},{'#','','#'},{'','#',''}}; /*定义多维数组*/ int i=0,j=0;for(;i<3;i++){ for(;j<3;j++) printf(“%c”,num[i][j]);printf(“/n”);}【实例17】指针的实例:void main(){ int a=3,*p;p=&a; /*将变量a的地址赋值给指针变量p*/printf(“%d,%d”,a,*p); /*输出二者的数值进行对比*/}【实例18】数组与指针实例:void main(){ int i=3,num[3]={1,2,3},*p;p=num; /*将数组num[]的地址赋值给指针变量p*/result =max(p,3); /*函数调用,计算数组的最大值*/}【实例19】P1口控制直流电动机实例sfr p1=0x90;sbit p10=p1^0;sbit p11=p1^1;void main (){int i, m;int j=100;int k=20;// 正快转for (i=0; i<100; i++){P10=1;for (j=0; j<50; j++){m=0;}}P10=0;for (j=0; j<10; j++){m=0}//正慢转for (i=0; i<100; i++) {P10=1;for (j=0; j<10; j++) {m=0}}p10=0;for (j=0; j<50; j++) {m=0}// 负快转for (i=0; i<100; i++) {p11=1;for (j=0; j<50; j++) {m=0;}}p11=0;for (j=0; j<10; j++) {m=0;}// 负慢转for (i=0; i<100; i++) {p11=1;for (j=0;j<10;j++) {m=0;}}p11=0for (j=0; j<50; j++) {m=0;}}第二章【实例20】用74LS165实现串口扩展并行输入口(1)函数声明管脚定义//---------------------------------------库函数声明,管脚定义------------------------------------------ #include<reg52.h>sbit LOAD=P1^7;//用P1^7控制SH/ 管脚(2)串口初始化函数UART_init()//-------------------------------------------------------------------------------------------------------------- // 函数名称:UART_init()// 功能说明:串口初始化,设定串口工作在方式0//-------------------------------------------------------------------------------------------------------------- void UART_init(void){SCON=0x10;//设串行口方式0,允许接收,启动接收过程ES=0;//禁止串口中断}(3)数据接收函数PA()//-------------------------------------------------------------------------------------------------------------- // 函数名称:PA()// 输入参数:无// 输出参数:返回由并口输入的数据// 功能说明:接收八位串行数据//-------------------------------------------------------------------------------------------------------------- unsigned char PA(void){unsigned char PA_data;LOAD=0;//当P1.7输出低电平,74LS165将并行数据装入寄存器//当中LOAD=1;//当P1.7输出高电平,74LS165在时钟信号下进行移位UART_init();//74LS165工作在时钟控制下的串行移位状态while(RI==0);//循环等待RI=0;PA_data=SBUF;return PA_data;//返回并行输入的数据}(1)函数声明管脚定义//---------------------------------------库函数声明,管脚定义------------------------------------------ #include<reg52.h>sbit a7=ACC^7;sbit simuseri_CLK=P1^6;//用P1^6模拟串口时钟sbit simuseri_DATA=P1^5;//用P1^5模拟串口数据sbit drive74165_LD=P1^7;//用P1^7控制SH/ 管脚(2)数据输入函数in_simuseri()//-------------------------------------------------------------------------------------------------------------- // 函数名称:in_simuseri()// 输入参数:无// 输出参数:data_buf// 功能说明:8位同位移位寄存器,将simuseri_DATA串行输入的数据按从低位到// 高位// 保存到data_buf//-------------------------------------------------------------------------------------------------------------- unsigned char in_simuseri(void){unsigned char i;unsigned char data_buf;i=8;do{ACC=ACC>>1;for(;simuseri_CLK==0;);a7= simuseri_DA TA;for(;simuseri_CLK==1;);}while(--i!=0);simuseri_CLK=0;data_buf=ACC;return(data_buf);}(3)数据输出函数PAs()//-------------------------------------------------------------------------------------------------------------- // 函数名称:PAs()// 输入参数:无// 输出参数:PAs _buf,返回并行输入74LS165的数据// 功能说明:直接调用,即可读取并行输入74LS165的数据,不需要考虑74LS165的// 工作原理//--------------------------------------------------------------------------------------------------------------unsigned char PAs(void){unsigned char PAs_buf;drive74165_LD=0;drive74165_LD=1;PAs_buf= in_simuseri();return(PAs_buf);}【实例21】用74LS164实现串口扩展并行输出口单片机串口驱动74LS164的程序主要包括函数声明管脚定义部分、串口初始化函数以及数据发送函数。

单片机例题

单片机例题

1、采集的温度放在A,54H为下限温度,55H为温度上限,小于下限升温,大于下限降温。

CJNE A,55H,LOOPAJMP FHLOOP: JNC JWCJNE A,54H,LOOP1AJMP FHLOOP1:JC SWFH:RET2、编写程序,将内部RAM的20H~2FH共16个连续单元清零MOV R0,#20HMOVR7,#16LOOP:MOV @R0,#00HINC R0DJNZ R7,LOOPEND3、将外部RAM5500H,开始内容送到内部RAM40~4FHMOV R1,#40HMOV DPTR,#5500HMOV R7,#16LOOP:MOVX A,@DPTRMOV @R1,AINC R0INC DPTRDJNZ R7,LOOPEND4、将内部RAM31H开始的10个无符号数值相加结果存入30H单元,设和不超过8位法一:法二:MOV R0,#31H MOV R0,#31HMOV R7,#10 MOV R7,#09CLR A MOV A,@R0LOOP:ADD A,@R0 LOOP:INC R0INC R0 ADD A,@R0DJNE R7,LOOP DJNE R7,LOOPMOV 30H,A MOV 30H,AEND END5、已知两个十进制的数分别在内部RAM 40H单元和50H开始存放(低位在前),其中字节长度存放在内部RAM 30H中,编程实现十进制求和,并把所求和结果存放在40H开始的单元中MOV R0,#40HMOV R1,#50HCLR CLOOP:MOV A,@R0ADDC A,@R1DA AMOV @R0,AINC R0INC R1DJNE 30H,LOOPCLR AADDC A,#00HMOV @R0,A 最高位要进1情况END6、内部RAM 30H,31H单元分别存放在两位BCD码形式表示的被减数和减数(70-28=42),两者相减后的差仍以BCD码形式存放在32H中CLR CMOV A,#9AHSUBB A,#28HADD A,#70DA AEND7、将A的低四位传到P1口的低四位,而P1口的高四位不变ANL A,#0FHANL P1,#0F0HORL P1,A8、将A的数据拆成2个半字节,分别传送到30H,31H的低四位,而30H,31H的高四位不变MOV R0,AANL A,#OFHANL 30H,#0F0HORL 30H,AMOV A,R0SWAP A。

单片机例题

单片机例题
(41H)=1FH
(40H)=71H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV 52H,#69H
MOV 51H,#3BH
MOV 50H,#68H
MOV 42H,#3AH
MOV 41H,#0EAH
ADD A,#0CH
MOV DPTR,#0123H
MOVX @DPTR,A
END
2.编写三字节无符号数加法程序,加数69H,3BH,68H存放在52H,51H,50H单元中,被加数3AH,E4H,09H存放在42H,41H,40H单元中,“和”存放在42H,41H,40H单元中。
MOV TMOD,#00H
MOV TH0,#63H
MOV TL0,#18H
SETB TR0
SETB EA
SETB ET0
SETB $
LP1:
DJNZ R1,LP2
CPL P3.3
MOV TH0,#63H
MOV TL0,#18H
MOV R1,#200
加数: (52H)=69H 被加数: (42H)=3AH
(51H)=3BH (41H)=E4H
(50H)=68H (40H)=09H
结果: (42H)=A4H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TOIRQ
MAIN:
MOV TMOD,#00H
MOV TH0,#0E0H
MOV TL0,#18H
MOV R5,#0FAH
SETB EA
SETB ET0
SJMP $

单片机 c语言例题

单片机 c语言例题
•i=a[j]/16;
•if(i<10)
•{XBYTE[dy+2*j]=0x30+i;}
•else {XBYTE[dy+2*j]=0x37+i;}
•i=a[j]%16;
•if(i<10)
•{XBYTE[dy+2*j+1]=0x30+i;}
•else {XBYTE[dy+2*j+1]=0x37+i;}
PC口地址(PC8155):FEFBH
#include“reg51.h”
#include“absacc.h”
#define COM8155 XBYTE[0xfef8]
#define PA8155 XBYTE[0xfef9]
void delay(void)/*延时1ms*/
{
TMOD=0X01
TH0=(65536-500)/256;
delay();
}
delay();
delay();
}
}
•12.设晶振频率为12MHZ,用定时器T1中断控制两个LED以不同周期闪烁,用C语言编程实现该功能。
•#include<reg51.h>
•sbit D1=P2^0; //将D1位定义为P2.0引脚
•sbit D2=P2^1; //将D2位定义为P2.1引脚
•{a=*(add0+j);
•*(add0+j)=*(add0+i);
•*(add0+i)=a;}
•}
•}
•while(1) ;

•}
5:外部中断0引脚(P3.2)接一个开关,P1.0接一个发光二极管。开关闭合一次,发光二极管改变一次状态。

单片机课堂例题

单片机课堂例题
D7
D6
D5
D4
D3
D2
D1
D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
T1控制
TMOD=10H
T0控制
中断方式:
ORG 0000H
LJMP MAIN
ORG 001BH
AJMP LOOP
MAIN: MOV TMOD,#10H
MOV TH1,#0FFH
MOV TL1,#083H
SETB EA
SETB ET1
sbit K3=P1^6;
code uchar
seg7code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
code uchar seg7bit[6]={0x01,0x02,0x04,0x08,0x10,0x20};
main()
{
KEY3接P1.6。KEY0按下个位显示“1”,KEY1按下
十位显示“2”, KEY2按下百位显示“3” KEY3按
下千位显示“4”
C4
C1
C2
30PF
30PF
X1
R14
R15
R16
R17
R18
R19
R20
R21
10k10k10k10k10k10k10k10k
U1
10uF
19
XTAL1
CRYSTAL
VREF--标准电压, DAC0832:-10V~+10V
• 分析:
DELAY: MOV
• 1VDx=51;2VDx=102
R7,#N
上升段:

单片机例题

单片机例题

【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。

编写程序将该数据转换成压缩BCD码存放在20H单元。

ORG 0040HSTART:MOV A,21H ;取十位ASCII码ANL A,#0FH ;保留低半字节SW AP A ;移至高半字节MOV 20H,A ;存于20H单元MOV A,22H ;取个位ASCII码ANL A,#0FH ;保留低半字节ORL 20H,A ;合并到结果单元SJMP $END【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。

编制程序,根据x的大小求y并送回原单元。

ORG 0040HSTART:MOV A,30H ;取x至累加器JZ NEXT ;x = 0 ,转NEXTANL A,#80H ;否,保留符号位JZ DONE ;x >0 ,转结束MOV A,#05H ;x <0 ,处理Y=X+5ADD A,30HMOV 30H,A ;X+05H送YSJMP DONENEXT:MOV 30H,#20H ;x = 0 ,20H送YDONE:SJMP DONEEND【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。

设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。

START:MOV R7,#3 ;以转移序号3为例ACALL JPNUMAJMP STARTJPNUM:MOV DPTR,#TAB ;置分支入口地址表首址MOV A,R7ADD A,R7 ;乘2,调整偏移量MOV R3,AMOVC A,@A+DPTR ;取地址高字节,暂存于R3XCH A,R3INC AMOVC A,@A+DPTR ;取地址低字节MOV DPL,A ;处理程序入口地址低8位送DPLMOV DPH,R3 ;处理程序入口地址高8位送DPHCLR AJMP @A+DPTRTAB:DW PP0DW PP1DW PP2DW PP3DW PP4PP0:MOV 30H,#0 ;转移序号为0时,置功能号“0”于30H单元RETPP1:MOV 30H,#1 ;转移序号为1时,置功能号“1”于30H单元RETPP2:MOV 30H,#2 ;转移序号为2时,置功能号“2”于30H单元RETPP3:MOV 30H,#3 ;转移序号为3时,置功能号“3”于30H单元RETPP4:MOV 30H,#4 ;转移序号为4时,置功能号“4”于30H单元RET【例4-4】将内部RAM的30H至3FH单元初始化为00H。

级单片机复习例题 (有答案版)

级单片机复习例题 (有答案版)

11级单片机总复习开卷考试,可以带书和手写的作业本,笔记本,不许带打印的和复印的资料。

题型1、填空题(C语言任务1-12,在4-7题考不到的如串口)2、简答题(C语言任务1-12,在4-7题考不到的如串口)3、读程序(C语言任务1-12,在4-7题考不到的如串口)4、写程序(C语言定时器、计数器、中断参考任务4-5)5、综合(存储器扩展参考任务7)6、综合(A/D D/A扩展参考任务11-12)7、综合(键盘显示器扩展参考任务9-10)一、填空题样题:40个引脚的功能、作用p17如:●8031引脚T1的作用__________,/EA的作用________________________。

二、简答题存储器●MCS-51单片机片内RAM低128字节单元划分为哪几个区域?应用时应该如何合理有效地使用?(片内数据存储器分为哪几个性质和用途不同的区域?)(试说明8051单片机按照存储器功能和所在位置分类,并分别说明其容量。

)(8051单片机存储器的组织结构是怎样的?)●8051片内数据存储器分为哪几个性质和用途不同的区域?●51单片机有几种地址译码方式,分别说明它们的优缺点。

●C51变量有几种存储类型,分别说明它们的特点。

●单片机访问外设有哪几种方式,分别说明它们的特点。

计算机的数据传输方式分为串行传输和并行传输,试说明它们各自的传输特点、优缺点和使用场合。

三、读程序样题:1.阅读下列C语言程序,并详细解释指定位置语句的功能。

# include <reg52.h>//语句功能:包含单片机寄存器的头文件unsigned char data daData;unsigned char xdata *add_dac0832 = 0x7fff;//语句功能定义add_dac0832 指向片外地址0x7fffvoid Delay(unsigned int Delay){for( ;Delay>0;Delay--) ;}void main( ){ daData=0;while(1){ *add_dac0832 = daData; //语句功能把daData赋值给D/A进行转换delay();daData++; //语句功能_daData数值自加1_}}该段程序的功能__产生阶梯波四、编程题(定时器、计数器、中断、查询)样题:.8051采用3MHz晶振,写一个完整的程序实现从P2.1输出周期为20ms的方波,要求使用定时/计数器T1和查询方式,寄存器中任意位用“1”代。

单片机 c语言例题

单片机 c语言例题

单片机 c语言例题单片机 C 语言例题在单片机教学中,C 语言的例题是帮助学生理解和掌握单片机编程的重要工具。

通过例题的学习,学生可以更好地理解C语言语法和单片机的工作原理。

本文将介绍几个单片机 C 语言例题,帮助读者更好地了解单片机的应用。

例题一:LED 灯的闪烁以下是一个简单的单片机 C 语言例题,通过控制单片机上的LED 灯,实现灯的闪烁效果。

```c#include <reg51.h> // 单片机头文件// 主函数void main() {while(1) { // 循环执行P1 = 0x00; // 将 P1 置为低电平(LED 灯熄灭)Delay(); // 延时P1 = 0xFF; // 将 P1 置为高电平(LED 灯亮)Delay(); // 延时}}// 延时函数void Delay() {int i, j;for(i = 0; i < 800; i++) { // 大约延时 1 秒for(j = 0; j < 1000; j++) {}}}```在上述例题中,我们使用了一个延时函数 `Delay()`,通过循环控制LED 灯的亮灭状态,实现了灯的闪烁效果。

通过修改延时循环,可以改变灯闪烁的频率。

例题二:数码管显示数字以下是另一个单片机 C 语言例题,通过控制单片机上的数码管,实现数字的显示效果。

```c#include <reg51.h> // 单片机头文件sbit LED = P2^0; // 数码管的引脚定义// 数码管显示数字函数void Display(int num) {switch (num) {case 0: LED = 0xFC; break; // 数字0显示case 1: LED = 0x60; break; // 数字1显示case 2: LED = 0xDA; break; // 数字2显示case 3: LED = 0xF2; break; // 数字3显示case 4: LED = 0x66; break; // 数字4显示case 5: LED = 0xB6; break; // 数字5显示case 6: LED = 0xBE; break; // 数字6显示case 7: LED = 0xE0; break; // 数字7显示case 8: LED = 0xFE; break; // 数字8显示case 9: LED = 0xF6; break; // 数字9显示default: LED = 0xFF; break; // 其他情况,不显示数字 }}// 主函数void main() {int num = 0; // 待显示的数字while(1) { // 循环执行Display(num); // 数码管显示数字num++; // 数字自增if (num > 9) { // 数字大于9后重置为0 num = 0;}Delay(); // 延时}}// 延时函数void Delay() {int i, j;for(i = 0; i < 800; i++) { // 大约延时 1 秒 for(j = 0; j < 1000; j++) {}}}```在上述例题中,我们通过控制数码管的引脚,并编写了一个显示数字的函数 `Display()`,通过循环控制数码管显示不同的数字,实现了数字的切换和显示效果。

单片机课件例题

单片机课件例题

【例1.】:已知ROM中0302H 单元有一个数x,现要把它送到累加器A中,试编程。

MOV DPTR,#0300H ;立即数送DPTRMOV A,#02H ;立即数送累加器AMOVC A,@A+DPTR ;从ROM的0302单元取数送A【例2.】试编出把30h和40h单元内容进行交换。

MOV A,30H ;(30h) → AMOV 30H,40H ;(40h) → 30hMOV 40H,A ; A → 40h【例3】将20H开始的32个单元全部清0。

MOV A,#00H ;A 00HMOV R0,#20H ;R0 20H,以R0作地址指针MOV R7,#20H ;R7计数,R7 32LP1: MOV @R0,A ;将指示的单元清0INC R0DJNZ R7,LP1 ;R7 R7-1,若R7不为0则转LP1重复【例4】将外部RAM的8000H单元的内容传送至A中。

MOV DPTR, #8000HMOVX A, @DPTR【例5】有一输入设备,其端口地址为2040H,该端口数据为41H,将此值存入片内RAM 的20H单元中。

MOV DPTR,#2040HMOVX A,@DPTRMOV 20H,A执行结果为:片内20H单元的内容为41H。

【例6】已知外部RAM的88H单元有一个数x,试编程将x送外部RAM的1818H单元。

【解】:外部RAM中的数据是不能直接传送的,因此必须使用两次MOVX 指令完成此操作。

ORG 2000HMOV R0,#88H ;为8位指针赋值MOV DPTR,#1818H ;为16位指针赋值MOVX A,@R0 ;取x 到累加器AMOVX @DPTR,A ;x 送RAM的1818h单元例7:执行下列程序后,A中的内容为多少?该程序是一个查表程序。

ORG 2100H ;各指令的地址为MOV A,#09H ;2100HMOVC A,@A+PC ;2102HRET ;2103HORG 210AHTAB: DB 0C0H ;210AHDB 0F9H ;210BHDB 0A4H ;210CHDB 0B0H ;210DH运行结果:A=0A4H例8:已知,片外RAM20h单元、内部RAM20h单元分别有数x和y,试编程互将两数相交换。

单片机实验例题

单片机实验例题

实验1 LED单灯跑动ORG 0000HAJMP MAINORG 0030HMAIN:MOV A,#0FEHMOV R0,#9 ;循环九次,8个灯亮及1次灯全灭START:MOV P0,A ;输出到P0口连接的LED灯上SETB C ;置进位CRLC A;带进位左移CALL D ELAY ;延时一段时间DJNZ R0,START ;反复循环AJMP MAIN ;重新开始;延时子程序DELAY:MOV R1,#15D1: MOV R2,#100D2: MOV R3,#100DJNZ R3,$DJNZ R2,D2DJNZ R1,D1RETEND实验2****************************步进电机的驱动*************************************;FOSC = 12MHz;---------------------------------------------------------------------------------; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!; 本步进电机步进角为5.625度. 一圈360 度, 需要64个脉冲完成!!! ;---------------------------------------------------------------------------------; A组线圈对应P0.0; B组线圈对应P0.1; C组线圈对应P0.2; D组线圈对应P0.3; 正转次序: AB组--BC组--CD组--DA组(即一个脉冲,正转5.625度) ;----------------------------------------------------------------------------------ORG 0000HLJMP MAINORG 0100HMAIN:;----------------------------正转--------------------------MOV R3,#192 ;正转3圈共192个脉冲START:MOV R0,#00HSTART1:MOV P0,#00HMOV A,R0MOV DPTR,#TABLEMOVC A,@A+DPTRJZ START ;对A的判断,当A=0时则转到STARTMOV P0,ALCALL DELAYINC R0DJNZ R3,START1MOV P0,#00HLCALL DELAY1;-----------------------------反转------------------------MOV R3,#128 ;反转2圈共128个脉冲START2:MOV P0,#00HMOV R0,#05START3:MOV A,R0MOV DPTR,#TABLEMOVC A,@A+DPTRJZ START2MOV P0,ACALL D ELAYINC R0DJNZ R3,START3MOV P0,#00HLCALL DELAY1LJMP MAIN;---------------------------转速控制-----------------------DELAY: MOV R7,#10 ;步进电机的转速M3: MOV R6,#248DJNZ R6,$DJNZ R7,M3RET;---------------------------延时控制----------------------DELAY1: MOV R4,#5 ;2S 延时子程序DEL2: MOV R3,#200DEL3: MOV R2,#250DJNZ R2,$DJNZ R3,DEL3DJNZ R4,DEL2RET;---------------------------正反转表----------------------TABLE:DB 03H,06H,0CH,09H; 正转表DB 00; 正转结束DB 03H,09H,0CH,06H; 反转表DB 00; 反转结束END实验3 8个数码管轮流显示;;重要说明:数码管在循环轮流显示的时候,喇叭跟继电器会有规律的发出声音跟吸合,;解决的办法可以将SE8(SPEAKER),SE2(RELAY)跳线设置为OFF,或者在软件上加入CLR P3.7 就可以解决ORG 0000HAJMP MAINORG 0030HMAIN:CLR P3.7 ;锁定继电器喇叭数据锁存器MOV P0,#0c0h ;送0的段码到数码管CLR P2.0 ;跟P2.0连接的那位数码管点亮CALL D ELAY ;延时SETB P2.0 ;关闭P2.0连接的数码管显示CLR P2.1 ;跟P2.1连接的那位数码管点亮CALL D ELAY ;延时SETB P2.1 ;关闭P2.1连接的数码管显示CLR P2.2 ;跟P2.2连接的那位数码管点亮CALL D ELAY ;延时SETB P2.2 ;关闭P2.2连接的数码管显示CLR P2.3 ;跟P2.3连接的那位数码管点亮CALL D ELAY ;延时SETB P2.3 ;关闭P2.3连接的数码管显示CLR P2.4 ;跟P2.4连接的那位数码管点亮CALL D ELAY ;延时SETB P2.4 ;关闭P2.4连接的数码管显示CLR P2.5 ;跟P2.5连接的那位数码管点亮CALL D ELAY ;延时SETB P2.5 ;关闭P2.5连接的数码管显示CLR P2.6 ;跟P2.6连接的那位数码管点亮CALL D ELAY ;延时SETB P2.6 ;关闭P2.6连接的数码管显示CLR P2.7 ;跟P2.7连接的那位数码管点亮CALL D ELAY ;延时SETB P2.7 ;关闭P2.7连接的数码管显示AJMP MAIN ;重新开始;延时子程序DELAY:MOV R5,#30D1: MOV R6,#100D2: MOV R7,#100DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND实验4P10P11和LED显示;说明:本程序必须要把开发板上的SE2跳线设置为2-3短接;说明:P1.1键为继电器放开键P1.0为吸合键;端口定义KEY1 BIT P1.0KEY2 BIT P1.1RELAY BIT P2.6SLED_LATCH BIT P3.6 ;数码管锁存器LE脚LED BIT P0.0ORG 0000HAJMP MAINORG 0030HMAIN:CLR SLED_LATCH ;锁定数码管锁存器,数码管不输出数据。

级单片机复习例题 (有答案版)

级单片机复习例题 (有答案版)

11级单片机总复习开卷考试,可以带书和手写的作业本,笔记本,不许带打印的和复印的资料。

题型1、填空题(C语言任务1-12,在4-7题考不到的如串口)2、简答题(C语言任务1-12,在4-7题考不到的如串口)3、读程序(C语言任务1-12,在4-7题考不到的如串口)4、写程序(C语言定时器、计数器、中断参考任务4-5)5、综合(存储器扩展参考任务7)6、综合(A/D D/A扩展参考任务11-12)7、综合(键盘显示器扩展参考任务9-10)一、填空题样题:40个引脚的功能、作用p17如:●8031引脚T1的作用__________,/EA的作用________________________。

二、简答题存储器●MCS-51单片机片内RAM低128字节单元划分为哪几个区域?应用时应该如何合理有效地使用?(片内数据存储器分为哪几个性质和用途不同的区域?)(试说明8051单片机按照存储器功能和所在位置分类,并分别说明其容量。

)(8051单片机存储器的组织结构是怎样的?)●8051片内数据存储器分为哪几个性质和用途不同的区域?●51单片机有几种地址译码方式,分别说明它们的优缺点。

●C51变量有几种存储类型,分别说明它们的特点。

●单片机访问外设有哪几种方式,分别说明它们的特点。

计算机的数据传输方式分为串行传输和并行传输,试说明它们各自的传输特点、优缺点和使用场合。

三、读程序样题:1.阅读下列C语言程序,并详细解释指定位置语句的功能。

# include <reg52.h>//语句功能:包含单片机寄存器的头文件unsigned char data daData;unsigned char xdata *add_dac0832 = 0x7fff;//语句功能定义add_dac0832 指向片外地址0x7fffvoid Delay(unsigned int Delay){for( ;Delay>0;Delay--) ;}void main( ){ daData=0;while(1){ *add_dac0832 = daData; //语句功能把daData赋值给D/A进行转换delay();daData++; //语句功能_daData数值自加1_}}该段程序的功能__产生阶梯波四、编程题(定时器、计数器、中断、查询)样题:.8051采用3MHz晶振,写一个完整的程序实现从P2.1输出周期为20ms的方波,要求使用定时/计数器T1和查询方式,寄存器中任意位用“1”代。

单片机练习题及例题

单片机练习题及例题

单片机练习题及例题单片机课堂练习题/例题总结习题和思考题一1、一个完整的单片微机芯片内至少有哪些部件?2、根据程序存储器的差别单片机可以分为那些类型?3、单片机的主要特性是什么?它适宜于构成一个通用微机系统还是专用微机系统?为什么?习题与思考题二1、8051单片机内包含哪些主要逻辑功能部件?2、MCS-51单片机结构上有哪些主要特点?习题和思考题三1、详细描绘MCS-51单片机的存储器配置图。

2、MCS-51单片机是通过哪些方法将程序存储器和数据存储器严格分开的?3、什么是单片机的特殊功能寄存器?8051/8052各有几个特殊功能寄存器?这些特殊功能寄存器占有的地址范围?4、MCS—51单片机有哪些可直接寻址的位?5、什么是堆栈?8031的堆栈区可以设在什么地方?一般应设在什么区域?如何实现?试举例说明。

习题和思考题四1、试根据P1口和P3口的结构特性,指出它们作为输入口或第二功能输入/输出的条件。

2、MCS-51中无ROM型单片机在应用中P2口和P0口能否直接作为输入/输出连接开关、指示灯之类的外围设备?为什么?3、画出MCS-51系列单片机进行系统扩展时的三总线结构图。

课堂练习一1、8031有四个工作寄存器区,由PSW状态字中的RS1、RS0两位的状态来决定,单片机复位后,若执行SETBRS1指令,此时只能使用()区的工作寄存器。

A、0区B、1区C、2区D、3区2.09H位所在的单元地址是()A.02HB.21HC.08HD.20H3.单片机在进行取指令操作时,指令的地址是由()的内容决定。

A.SPB.PCC.DPTRD.PSEN和ALE4.P1口作输入用途之前必须()。

A.外接高电平B.外接上拉电阻C.相应端口先置0D.相应端口先置15.程序计数器PC用来()。

A.存放指令B.存放上一条的指令地址C.存放下一条的指令地址D.存放正在执行的指令地址思考题1.数123可能是()。

A.二进制数B.八进制数C.十六进制数D.四进制数E.十进制数2.8031单片机内部RAM包括()A.程序存储区B.堆栈区C.工作寄存器及特殊功能区D.位寻址区E.中断入口地址区3.8051单片机CPU的主要功能有()。

单片机例题

单片机例题

1.例:假定(A)=85H,(R0)=20H,(20H)=0AFH。

执行指令“ADD A,@R0”后,(A)=34H ,(CY)= 1 ,(OV)= 1 ,(P)=1。

(理论值是134H,发生溢出)1000 0101+) 1010 1111=1 0011 01002.例:设程序执行前F0=0,RS1RS0=00B,请问机器执行如下程序后MOV A,#0FH ;A←0FH ADD A,#F8H ;PSW中各位的状态是什么?解:上述加法指令执行时的人工算式是:0000 1111B + 1111 1000B = 1 0000 0111BF0、RS1和RS0由用户设定,加法指令也不会改变其状态;均为0;PSW=C1HCY为进位标志,为1;AC为半进位标志,也为1;P为奇偶标志,也为1;3.如:设片外RAM的2000H单元中有一个数X,若要把它取入累加器A,则可采用如下程序:MOV DPTR, #2000H ;DPTR←2000HMOVX A, @DPTR ;A←X(第二条指令MOVX的助记符“X”指示DPTR中的2000H是外部RAM 地址,而不是外部ROM地址,第三章将深入讨论,如是外部ROM地址,用MOVC)4.已知(SP)=60H,(DPTR)=3456H,在执行下列指令后PUS H DPHPUS H DPL(SP)=_62H___,内部RAM(61H)=_34H_ , RAM(62H)=_56H_ 。

5.外部ROM2000H单元内容送内部RAM20H单元:MOV A,#00HMOV DPTR,#2000HMOVC A,@A+DPTRMOV 20H,A(如送R0:则最后一条指令改为: MOV R0,A)6.外部RAM0020H单元内容送内部RAM20H单元:MOV DPTR ,#0020HMOVX A,@DPTRMOV 20H,A7..程序中执行二字节绝对调用指令“8100H :ACALL 48FH” 后,构造的目的地址是?PC+2→PC=8102,addr0~10→PC0~10 ,PC11~15不变048FH=0000 0 100 1000 1111 B8102H=1000 0 001 0000 0010 BPC = 1000 0 100 1000 1111 B=848FH8.分支结构:假定在外部ram中有ST1、ST2、ST3、共3个连续单元,其中st1和st2中存放两个无符号二进制数,要求找出其中的大数并存放入ST3.START: CLR CMOV DPTR ,#ST1MOVX A,@DPTRMOV R2,AINC DPTRMOVX A,@DPTRSUBB A ,R2JNC BIG1XCH A,R2BIG0: INC DPTRMOVX @DPTR,ARETBIG1: MOVX A,@DPTRSJMP BIG09.循环结构:设两个10字节的无符号数分别存放在内部RAM以20H和60H开始的单元中,要求相加后的结果要求存放在以60H开始单元的数据区。

单片机例题.

单片机例题.
单片机 设计例题
一、基本结构程序
例1 假定在外部RAM中有ST1、ST2和ST3共3个连续单 元,其中ST1、ST2单元中分别存放着两个8位无符号 数,要求找出其中的大数并存入ST3单元。
分析:两个无符号数的大小比较可利用两数相减是 否有借位来判断,流程图和程序如下所示:
例1参考程序如下:
START: CLR C
2)按照上述的控制思路,我们可以方便的画出流程 图,如下图所示。
ORG 1000H
STR: MOV P1, #00000110B
WT1:JB
P1.1, WT1 ;启动?
SETB P1.3 ;电机启动
WT2:JB
P1.2, WT2 ;停止?
CLR
P1.3 ;电机停止
SJMP WT1
END
a-b (a≥0) Y=
a+b (a < 0)
解:本题关键是判a是正数,还是负数;由ACC.7便知。
ORG 1000H BR: JB ACC.7,MINUS
CLR C SUBB A,B SJMP DONE MINUS: ADD A,B DONE: SJMP $
END
例4、设有两个16位无符号数NA,NB分别存放在8031单片机内部 RAM的40H、41H及50H、51H单元中,当NA > NB时,将内部RAM的 42H单元清0;否则,将该单元置成全1,试编程。 解法I:因为无16位数的比较指令,所以,只能用8位数的比较
HIGHE:MOV 42H,R0 SJMP $ END
例5:找最大数(单字节无符号数)
编制说明 R0:存放一批数的首址指针;
R2字节数 解: MAX: MOV A,R0;存首址指针
MOV R1,A DEC R2 ;??? MOV A,@R1 LP0: MOV R3,A DEC R1

单片机例题

单片机例题

第三章1、单循环程序(1)循环次数是已知的程序例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。

解:先将中间单元置成30H,然后判欲转换位是否为1,若是,则将中间单元内容加1;否则,中间单元内容保持不变。

通过左移指令实现由高到低的顺序进行转换。

START:MOV R2,#08H ;循环计数初值(循环次数已知)MOV R0,#10H ;地址指针初值MOVX A,@R0 ;取数MOV B,A ;暂存B中LOOP:MOV A,#30H ;将中间单元(A)置成30HJNB B.7,NA ;判断转换的二进制位为0否?INC A ;若为1,则变成1的ASCII码“31H”NA:INC R0 ;修改地址指针MOVX @R0,A ;存放转换的结果MOV A,BRL A ;作好准备,判断下一位MOV B,A ;暂存DJNZ R2,LOOP ;判断转换结束否?未完继续SJMP $(2)循环次数未知的程序例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(…CR‟= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。

解:从首单元开始取数,每取一数判断其是否为…CR‟,是则结束。

ORG 1000HSTADA DATA 20HSLANG DATA 1FHCMCR2:MOV R0,#STADA-1MOV B,#0FFHCRLOP:INC R0INC BMOVX A,@R0CJNE A,#0DH,CRLOPMOV SLANG,BSJMP $END2、多重循环设计循环体中还包含着一个或多个循环结构,即双重或多重循环。

例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。

3.例:编程实现P1口连接的8个LED显示方式如下:从P1.0到P1.7的顺序,依次点亮其连接的LED。

单片机第三章 例题

单片机第三章 例题

[例] 设单片机的P1.0口线外接一个LED电路,当P1.0输出低电平,LED亮。

编程实现控制LED亮灭。

ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP,#60HSETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY: MOV R7,#250D1: MOV R6,#100D2: DJNZ R6,D2DJNZ R7,D1RETEND[例] 应用定时器T0产生1ms定时,并使P1.0输出周期为2ms 的方波,已知晶振6MHz。

选择13位计数器,计数初值X:(213-X)*Tcy=1*10-3X=7692(00B)如何赋值TH0、TL0?TH0=0F0H,TL0=0CH判断计数结束的方法?查询方法:TF0ORG 0000HMOV TMOD,#00H ;写入方式控制字MOV TL0,#0CH ;计数初值写入MOV TH0,#0F0HSETB TR0 ;启动T0SETB P1.0LP:JBC TF0,OK ;定时溢出转移,同时清除TF0 SJMP LPOK:MOV TL0,#0CH ;计数初值写入MOV TH0,#0F0HCPL P1.0AJMP LPEND判断计数结束的方法?TF0硬件置1触发中断请求ORG 0000LJMP MAINORG 000BH ;T0中断向量LJMP INTT0 ;跳转至中断服务程序ORG 0030HMAIN:MOV SP,#60HSETB EA ;开全局中断SETB ET0 ;开T0中断SETB PT0 ;设置T0高优先级MOV TMOD,#00H ;写入方式控制字MOV TL0,#0CH ;计数初值写入MOV TH0,#0F0HSETB TR0 ;启动T0SETB P1.0SJMP $INTT0:MOV TL0,#0CH ;计数初值写入MOV TH0,#0F0HCPL P1.0RETI ;中断返回END[例] 用查询法编写串行口方式1下的发送程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.MCS-51单片机的RS1,RS0=11时,当前寄存器R0~R7占用内部RAM( )单元。

A. 00H—07HB. 08H—0FHC. 10H—17HD. 18H—1FH2.MCS-51单片机(非增强型)有片内RAM容量( ) 。

A. 4KBB. 8KBC. 128BD. 256B3.MCS-51单片机的外部中断0中断入口地址为( )。

A. 0003HB. 000BHC. 0013HD. 001BH4.MCS-51单片机的定时器/计数器工作方式1是()。

A.8位计数器结构B.16位计数器结构C.13位计数器结构D.2个8位计数器结构5.51单片机执行MOVC A, @A+DPTR指令时,相关的信号状态是()。

A.PSEN有效为低电平,RD有效为低电平B.PSEN无效为高电平,RD有效为低电平C.PSEN有效为低电平,RD无效为高电平D.PSEN有效为高电平,RD无效为高电平6.下列指令不是变址寻址方式的是()。

A.JMP@A+DPTRB.MOVC A,@A+PCC.MOVX A,@DPTRD.MOVC A,@A+DPTR7.MCS-51单片机的4个并行I/O口作为通用I/O口使用时,( )口应该加上拉电阻。

A. P0B. P1C. P2D. P38.在片外扩展一片8K的EPROM 2764需要( )根地址线。

A. 11B. 12C. 13D. 149.程序状态字PSW的( )位为1时,表示带符号数加减运算中,A产生了溢出。

A. CyB. AcC. OvD. P10.相对转移指令SJMP所能跳转的范围是( )。

A.-128~+127B.-127~+127C.-32768~+32767D.-32767~+3276811.下面可以进行位寻址的寄存器是()A. DPTRB. SPC. IP D .TMOD12.MCS-51单片机外扩存储器芯片时,4个I/O口中用作地址总线和数据总线分时复用的是()。

A.P2口 B. P口 C. P1D. P口和P213.对某单元的部分位置位,应采用下面哪种逻辑操作()。

A. ANLB. ORLC. CPLD. XRL14.在定时器方式下,若fosc =12MHZ,方式0的最大定时间隔().A. 8.192msB. 16.384msC. 65.536msD. 131.072ms15.下列指令正确的是()。

A. MOV @R0,R7B. XCHD A,30HC. MOVX A,R3D. ADD A,R716.下列指令错误的是()。

A. ANL 36H,#99HB. MOV C,ACC.0C. ORL P1.0,CD. JBC 20H.0,LL117.已知SJMP rel ; pc←(pc)+2+rel,若PC=1000H,目标地址=1052H,则rel=( ).A . 50H B. 30H C. 40H D.02H18.8051单片机有()中断源。

A.3个B.4个C.5个 D .6个19.同级中断时,正在执行定时器0中断,能够事先中断嵌套的是()。

A.外部1 B . 外部0 C. 定时器1 D.串行口20..若PSW.4=0,PSW.3=1,现在需要保存R1的内容,可执行( )指令。

A. PUSH R1B. PUSH @R1C. PUSH 01HD. PUSH 09H21.单片机上电复位后,SP的内容为()。

A.00H B.07H C.0BH D.1BH22.MOVX A, @DPTR指令中源操作数的寻址方式是()。

A.立即寻址B.寄存器寻址C.寄存器间接寻址D.位寻址23.单片机中的程序计数器PC用来()。

A.存放指令B.存放正在执行的指令地址C.存放上一条指令地址D.存放下一条要执行的指令地址24.访问外部存储器或其它接口芯片时,做数据线和低8位地址线的是()。

A.P3口B.P2口C.P1口D.P0口25.8051单片机若晶振频率为f osc=12MH z,则一个机器周期等于()us。

A.1/12 B.1/2 C.1 D.226.使8051单片机的定时器T1停止计数的指令是()。

A.CLR TR0 B.CLR TR1 C.SETB TR0 D.SETB TR1 27.下列指令能使累加器A的最高位置1的是()。

A.ANL A,#7FH B.ANL A,#80HC.ORL A,#80H D.ORL A,#7FH28.MCS-51单片机在同一优先级里,级别最高的中断源是()。

A.定时器T0 B.定时器T1 C.外部中断0 D.外部中断1 29.当CPU响应定时器T1的中断请求后,程序计数器PC的内容是()。

A.0003H B.000BH C.0013H D.001BH30.下列指令正确的是()。

A.MOV A,@R2 B.DEC DPTRC.MOV C,A D.SETB 00H31.在计算机中,表示地址通常使用()。

A.无符号数B.原码C.反码D.补码32.关于MCS-51的堆栈操作,正确的说法是()。

A.先入栈,再修改栈指针B.先修改栈指针,再出栈C.先修改栈指针,再入栈D.以上都不对33.当使用8051且EA=1,则可以外扩ROM()。

A.64KB B.60K B C.58KB D.56KB34、所谓CPU是指()。

A.运算器与控制器B.运算器与存储器C.输入输出设备D.控制器与存储器35、MCS-51有两种读取并行I/O口信息的方法:一种是读引脚,还有一种是()。

A.读锁存器B.读缓冲器C.读累加器A D.读存储器36、在中断服务程序中,至少应有一条()。

A.传送指令B.转移指令C.加法指令D.中断返回指令7、以下运算中,37.与辅助进位位AC有关的是()。

A.二进制数B.八进制数C.十进制数D.十六进制数38、以下运算中对溢出标志OV没有影响的运算是()A.逻辑运算B.符号数加减法运算C.数据比较大小D.除法运算39、串行口中断的入口地址是()。

A.0003H B.000BH C.001BH D.0023H40、执行指令:MOV IE,#03H后,MCS-51单片机将响应的中断有()。

A.1个B.2个C.3个D.0个1、8051单片机片内共有___字节单元的ROM,片外最多可以寻址___KB。

2、要使8051单片机从片内的地址0000H开始执行程序。

那么EA应___。

3、外部中断请求有两种信号方式即___和___。

4、51单片机的堆栈栈顶由__来指示,复位时起始位置在___单元。

5、指令JNB P2.7,K1的作用是___。

6.MCS-51单片机内部含有:1个()位的CPU,片内128字节的(),片内4K字节的(),可寻址的()B外部程序存储器和数据存储器,()个特殊功能寄存器SFR,()个8位并行I/O口,()个定时器/计数器。

MCS-51单片机共有()个中断源。

7.MCS-51单片机的定时器/计数器T0有()种工作方式,定时器/计数器T1有()种工作方式,若采用12MHz晶振,则方式1时最大定时时间为()ms,方式2下的最大定时时间为()ms。

8.MCS-51单片机的中断子程序以()指令返回。

9.假定(A)=85H,(R0)=20H,(20H)=0AFH。

执行ADD A,@R0后,累加器A的内容为(),CY的内容为(),AC的内容为(),OV的内容为()。

10.当(RS0)=1,(RS1)=0时,R7对应内部RAM的()字节单元。

11.若不使用MCS-51片内程序存储器,引脚/EA必须接()。

12.用线选法扩展外部数据存储器时,若有4根高位地址线剩余,则一个外部数据存储单元最多可以有()的地址与之对应。

13、按执行时间,8051的指令分为()周期、()周期和()周期指令共三种。

14、MCS-51系统中,当PSEN信号有效时,表示CPU要从()读取信息。

15、累加器A的内容有偶数个1时,特殊功能寄存器()的()位的内容为()。

16、假定(A)=85H,(20H)=0AFH。

执行ADD A,20H后,累加器A的内容为(),CY的内容为(),AC的内容为(),OV的内容为()。

17、MCS-51单片机的最大计数值为()1、阅读程序:若(A)=80H,(R0)=17H,(17H)=34H,执行下列程序段后,(A)=?ANL A,#17H (A)= (1分)ORL 17H,A (17H)=XRL A,@R0 (A)=CPL A (A)=2、阅读程序:MOV A , #30HMOV B , #0AFHMOV R0, #31HMOV 30H, #87HXCH A , R0 ;(A)= ;(R0)= ;SWAP A(A)= ;四、编程1、将R0(低位)、R1(高位)中的16位带符号数求其相反数后送回。

设程序从2000H开始。

2、编写一循环程序,查找内部RAM 30H~50H单元中出现FFH个数,并将查找的结果存入51H单元。

设程序从0200H开始。

3、设符号函数为1 X>0Y= 0 X=0 (已知X地址为20H , Y的地址为21H) -1 X<0设程序从0200H开始。

4.请用位操作指令编程求逻辑方程(8分):ACCP+P=⨯+7.1PP2.30.1)1.20.(五、综合题设某单片机系统的晶振频率为6MHz,试编写利用T0产生1s定时的程序。

1、确定定时器T0的工作模式。

2、计算初值X。

3、查询式编程。

4、中断式编程。

六、存储器扩展已知1#地址范围为:7000H~77FFH2#地址范围为:6800H~6FFFH3#地址范围为:5800H~5FFFH4#地址范围为:3800H~3FFFH1、写出下面芯片哪些是EPROM,哪些是RAM,连接的区别是什么(写在图下面)2、用线选法完成下面图示的存储器连接。

(画图在卷纸上完成)P2.2 P2.1 P2.0 ALE P0 EAP2.6 P2.4 80C51 P2.5 P2.3 PSENWRRD。

相关文档
最新文档