单片机实验总结_第1页
单片机实验总结_第2页
单片机实验总结_第3页
单片机实验总结_第4页
单片机实验总结_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序由410出品,与老师的不大一样,此处省去1万字-----最终解释归410所有1.试编写程序。统计片内RAM30H~50H单元中FFH的个数,并将统计结果存51H。movr0,#30h//把30h赋给R0movr1,#00h//把00h赋给R1loop:cjne@r0,#0ffh,next//把R0所指的地址里的数(地址30h中的数)与0ffh比较incr1//若为0ffh则R1加1(计算0ffh的个数)next:incr0//若不一样则R0加1(即把R0里的地址加1,R0将指向下一个地址)cjner0,#51h,loop//比较R0所存的地址与51h,若不等则跳回loop继续执行mov51h,r1//若相等(R0里的数就为51h,完成30h到50h的计数)将R1里的值赋到地址51h里,即地址51h中存储着0ffh的个数sjmp$//等待end2、从片内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。试编写程序,找出其中最小的数,并将其存入20H单元中。movr0,#30h//把30h赋给R0mova,@r0//把R0所指30H中的数赋给a(a中就是地址30h中的无符号数)movr1,21h//把21h中的数赋给R1loop:incr0//R0加1(即R0将指向下一个地址)mov30h,@r0//把R0所指地址的数给到地址30h中cjnea,30h,chk//比较a中的数与地址30h中的数的大小,若a中的数>30H中的数,则Cy=0;否则相反chk:jclop//判断Cy是否为1,若是,则执行下面程序,否则跳至lop继续执行mova,@r0//把R0所指地址中的数给a,即把最小数赋给了alop:djnzr1,loop//R1减一,程序跳至loop继续执行,循环直至R1减到0mov20h,a//把a中的数赋到地址20h中end3、设片外RAM2000H单元中有一个8位二进制数,试编程将该数的低四位屏蔽掉,并送回原存储单元。movdptr,#2000h//将片外地址2000h给dptrmovxa,@dptr//将片外地址2000h中的数赋给aanla,#0f0h//将a中的数与0f0h与下,屏蔽低四位的数movx@dptr,a//将屏蔽好的数送回到片外地址2000h中end4、试编写程序,求出片内RAM20H单元中“1”的个数,并将结果存入21H单元。mov21h,#0h//将地址21h中置0(例如20h中是01101000)movr2,#08h//将8赋给R2(8个有效数)mova,20h//将地址20h中的数赋给alop:rlca//带Cy左循环移位(即第一次移位变为11010000,Cy=0)jncloop//判断Cy是否不等于1,若不等1,则程序跳至loopinc21h//若Cy等于1,则地址21h中的数加1loop:djnzr2,lop//R2减1,程序跳至lop执行直至R2=0,才执行下面的end5、试编一程序,分别统计在内部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。movr0,#30h //把30h给R0movr1,#20h //把20h给R1mov51h,#0mov52h,#0 //把地址51h,52h中的数置零L1:movb,#02h //把2h给bmova,@r0 //把R0所指地址中的数给adivab //a除以b,商给a,余数bmova,b //把b的数给acjnea,#0,L2 //比较a与0的大小,若不等跳至L2inc52h //若相等地址52h中的数加一jmpL3 //跳至L3L2:inc51h //地址51h中的数加一L3:incr0 //R0加一djnzr1,L1 //R1减一,跳至L1执行jmp$ //等待end6、在2000H~2004H单元中,存有5个压缩的BCD码,试编程将它们转换成ASCII码,并存入2005H开始的连续单元中。movdph,#20hmovdpl,#00h movr0,#5hmovr1,#0hlop:movdpl,r1movxa,@dptrmovb,aanla,#0fhorla,#30hmovdpl,r0movx@dptr,aincr0xcha,bswapaanla,#0fhvoiddelay(uinttime){uintj=0;for(;time>0;time--){for(j=0;j<120;j++);}}voidmain(){uintdataa=1;SCON=0;clk=1;while(1){unsignedintj;SBUF=dataa;if(TI)TI=0;dataa=_crol_(dataa,1);delay(500);}}12、按键显示相应的数(数码管)#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharucharPre=0xff,no=0xff;UcharcodeDSY_CODE[]={0x3f,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};voiddelay(uintms){uchari;while(ms--)for(i=0;i<120;i++);}voidkey(){uchartmp;P1=0xf0;delay(1);tmp=P1^0xf0;switch(tmp){case0x10:no=0;break;case0x20:no=1;break;case0x40:no=2;break;case0x80:no=3;break;default:no=16;}P1=0x0f;delay(1);tmp=P1^0x0f;switch(tmp){case2:no+=0;break;case4:no+=4;break;case8:no+=8;break;}}voidmain(){P0=0x00;while(1){P1=0xf0;if(P1!=0xf0)key();if(Pre!=no){P0=DSY_CODE[no+1];Pre=no;}delay(100);}}数码管循环显示(0~F)#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(t){uinti;while(t--)for(i=0;i<121;i++);}voidmain(){uintj=0;while(1){j=++j%16;P0=table[j];delay(300);}}14、甲机通过串口控制乙机LED闪烁甲机:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;sbitK1=P1^0;ucharOperation_No=0;//操作代码//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//向串口发送字符voidPutc_to_SerialPort(ucharc){SBUF=c;while(TI==0);TI=0;}//主程序voidmain(){LED1=LED2=1;SCON=0x40;//串口模式1,允许接收TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;TL1=0xfd;TI=0;TR1=1;while(1){DelayMS(100);if(K1==0)//按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No)//根据操作代码发送A/B/C或停止发送{case0:Putc_to_SerialPort('X');LED1=LED2=1;break;case1:Putc_to_SerialPort('A');LED1=~LED1;LED2=1;break;case2:Putc_to_SerialPort('B');LED2=~LED2;LED1=1;break;case3:Putc_to_SerialPort('C');LED1=~LED1;LED2=LED1;break;}}}}乙机:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P0^0;sbitLED2=P0^3;sbitK2=P1^0;ucharNumX=-1;//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//主程序voidmain(){LED1=LED2=1;SCON=0x50;//串口模式1,允许接收TMOD=0x20;//T1工作模式2TH1=0xfd;//波特率9600TL1=0xfd;PCON=0x00;//波特率不倍增RI=0;TR1=1;while(1){DelayMS(100);if(RI)//如收到则LED则动作{RI=0;switch(SBUF)//根据所收到的不同命令字符完成不同动作{case'X':LED1=LED2=1;break;//全灭case'A':LED1=0;LED2=1;break;//LED1亮case'B':LED2=0;LED1=1;break;//LED2亮case'C':LED1=LED2=0;//全亮}}}}15、乙机通过串口控制甲机数码管显示甲机:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P1^0;sbitLED2=P1^3;sbitK1=P1^7;ucharOperation_No=0;//操作代码//数码管代码ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//向串口发送字符voidsend(ucharc){SBUF=c;while(TI==0);TI=0;}//主程序voidmain(){LED1=LED2=1;P0=0x00;SCON=0x50;//串口模式1,允许接收TMOD=0x20;//T1工作模式2PCON=0x00;//波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90;//允许串口中断while(1){DelayMS(100);if(K1==0)//按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No)//根据操作代码发送A/B/C或停止发送{case0:send('X');LED1=LED2=1;break;case1:send('A');LED1=~LED1;LED2=1;break;case2:send('B');LED2=~LED2;LED1=1;break;case3:send('C');LED1=~LED1;LED2=LED1;break;}}}}//甲机串口接收中断函数voidSerial_INT()interrupt4{if(RI){RI=0;if(SBUF>=0&&SBUF<=9)P0=DSY_CODE[SBUF];elseP0=0x00;}}乙机:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P1^0;sbitLED2=P1^3;sbitK2=P1^7;ucharNumX=-1;//延时voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//主程序voidmain(){LED1=LED2=1;SCON=0x50;//串口模式1,允许接收TMOD=0x20;//T1工作模式2TH1=0xfd;//波特率9600TL1=0xfd;PCON=0x00;//波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1){DelayMS(100);if(K2==0){while(K2==0);NumX=++NumX%11;//产生0~10范围内的数字,其中10表示关闭SBUF=NumX;while(TI==0);TI=0;}}}voidSerial_INT()interrupt4{if(RI)//如收到则LED则动作{RI=0;switch(SBUF)//根据所收到的不同命令字符完成不同动作{case'X':LED1=LED2=1;break;//全灭case'A':LED1=0;LED2=1;break;//LED1亮c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论