资源描述:
《单片机程序流程图及源代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。实现方式:通过peripherals实现端口数据观察实验。程序流程图:P0,P1,P2,P3口初始化为0延时P0,P1,P2,P3各端口都设为1延时将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。源代码:ORG0
2、000H;程序入口地址LJMPMAIN;跳转到主程序ORG0300H;主程序地址MAIN:MOVP0,#00H;MOVP1,#00H;MOVP2,#00H;MOVP3,#00H;P0~P3均赋值为0ACALLDEL;调用延迟MOVP0,#0FFH;MOVP1,#0FFH;MOVP2,#0FFH;MOVP3,#0FFH;P0~P3均设为1MOVA,P0;将P0口值赋给累加器ACALLDEL;AJMPMAIN;跳转到主程序入口ORG0200H;延迟程序入口地址DEL:MOVR5,#04H;寄存器实现延迟,F3:MOVR6,#0
3、FFH;若主频为12MHZ则F2:MOVR7,#0FFH;延时为256*256*4F1:DJNZR7,F1;0.26S,人眼可分辨DJNZR6,F2;DJNZR5,F3;RET;从延迟程序返回END;结束3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。程序流程图:延时给P1口赋值将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。源代码:ORG0000H;程序入口SJMPMAIN;跳转到主程序ORG0300H;主程序入口地址MAIN:MOVP0,#0FCH;将数
4、码管0的编码赋给P0口ACALLDELAY;调用延迟,使数码管亮0持续0.33SMOVP0,#60H;show1ACALLDELAY;MOVP0,#0DAH;show2ACALLDELAY;MOVP0,#0F2H;show3ACALLDELAY;MOVP0,#66H;show4ACALLDELAY;MOVP0,#0B6H;show5ACALLDELAY;MOVP0,#0BEH;show6ACALLDELAY;MOVP0,#0E0H;show7ACALLDELAY;MOVP0,#0FEH;show8ACALLDELAY;MO
5、VP0,#0F6H;show9ACALLDELAY;AJMPLOOP;跳转到主程序入口ORG0200H;延迟程序入口DEL:MOVR5,#05H;采用软件延迟,若主频为12MHz,则DEL1:MOVR6,#0FFH;定时时间为256*256*5*1uS=0.33S,DEL2:MOVR7,#0FFH;人眼可分辨。DEL3:DJNZR7,DEL3;DJNZR6,DEL2;DJNZR5,DEL1;RET;延迟程序返回【实验二】定时器/计数器及中断实验实验内容:1、假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0
6、~9。(采用定时器实现延时并显示数字)。实验流程图:跟实验1.3差不多,只是延迟程序改成用定时器定时,定时器采用查询方式,由于定时器本身所能定时有点短,故采用寄存器进行计数以延长时间,定时器定时50ms,50ms*10=0.5s。源程序:ORG0000H;AJMPMAIN;跳入主程序ORG0030H;主程序地址MAIN:MOVP0,#0FCH;将1的编码值赋给ACALLDELAY;P0并调用延迟MOVP0,#0FCH;ACALLDELAY;MOVP0,#60H;ACALLDELAY;MOVP0,#0DAH;ACALLDEL
7、AY;MOVP0,#0F2H;ACALLDELAY;MOVP0,#66H;ACALLDELAY;MOVP0,#0B6H;ACALLDELAY;MOVP0,#0BEH;ACALLDELAY;MOVP0,#0E0H;ACALLDELAY;MOVP0,#0FEH;ACALLDELAY;MOVP0,#0F6H;依次将1~9的值赋ACALLDELAY;P0口,并调用延迟AJMPMAIN;跳回主程序入口DELAY:MOVR7,#0AH;寄存器赋值计定时器定时值AJMPDELAY1;跳转DELAY1:MOVTMOD,#01H选择方式1M
8、OVTH1,#3CHMOVTL1,#0B0H定时器赋初值SETBTR0;启动T0LOOPER:JBCTF0,PE;循环查询TF0是否置位AJMPLOOPERPE:MOVTH0,#3CHMOVTL0,#0B0H;定时器重新赋值DJNZR7,LOOPER;R7减1非零则跳转CLRTR0;软件清零SETBEX