单片机例题范例
单片机例题

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道编程例题及答案

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例程序设计范例汇总第一章 (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。
单片机例题
(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语言例题
•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接一个发光二极管。开关闭合一次,发光二极管改变一次状态。
单片机课堂例题
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。