单片机实验三
来源:互联网 发布:不用网络的小说 编辑:程序博客网 时间:2024/05/22 08:26
实验3.1 P1 口作输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。(采用软件延时的方法)
本次实验开始都将采用汇编和C语言两种方式编写程序,同时提高汇编能力和C语言能力。
以下是汇编程序:
ORG 0000HJMP STARTSTART:MOV P1,#01HF:CALL D500MOV A,P1RL AMOV P1,ASJMP FD500: ;这里的延时程序是单片机小精灵写的,我个人写的误差相对大一点,但是影响也不是特别大,这个的话误差非常小。 MOV R7,#0A7HDL1: MOV R6,#0ABHDL0: MOV R5,#10H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 NOP RET
C语言程序:
#include<reg51.h>#include<intrins.h>uchar a=0;void delay1s(void){ unsigned char a,b,c; for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); _nop_(); //if Keil,require use intrins.h}main(){ P1=0x01; while(1){ a=P1; a<<=1; if(a==0){ a++; } P1=a; delay1s(); //该程序也是单片机小精灵写出来的,我个人认为因为不知道C语言一个语句执行多久,所以不好写C语言的软件延时程序。 }}
后来我用Keil看了这个C语言程序的反汇编,发现那个延时子程序的汇编代码跟上面那个汇编程序的延时程序的代码一样,所以可以知道如果要用C语言写演示程序,尽量保持这种for循环嵌套,然后一定要是从初值减到0就好啦。
实验3.2 P1作输入口,将开关的状态反映在发光二极管上。
这里的内容其实是单片机实验的教材上面的,我一开始理解的题目不是这样的,因为之前教材上面也有类似的题目,但是是用四个开关控制四个灯泡,因为P1口就只有8个口,所以不能实现8个开关控制8个灯,但是好像P1口是准双向口,既可以输入,又可以输出。
汇编程序:
ORG 0000H LJMP START ORG 0040H START: MOV DPTR,#8700H ;这里的8700H好像是实验室单片机的并行输出口的地址,并不是所有的单片机都是这个。MOV P1,#0FFH READP1: MOV A,P1 MOVX @DPTR,A AJMP READP1END
C语言程序:很简单,直接可以赋值搞定
#include<reg52.h>#include<absacc.h>#define D XBYTE[0x8700]main(){ while(1){ D=P1; }}
这里另外也附上与潘老师的单片机对应的汇编程序
ORG 0000H LJMP START ORG 0040H START: MOV A,P3MOV P1,ASJMP STARTEND
单片机上有个8位独立键盘,对应的P3端口的各个位置,所以每次都读P3然后输出给P1就好了
C语言程序:
#include<reg52.h>main(){ while(1){ P1=P3; }}
阅读全文
0 0
- 单片机实验三
- 【单片机实验】按键实验(一,二,三)
- 单片机实验: 三轴磁场模块 GY-271
- 51单片机学习笔记【三】——数码管实验
- 【单片机】编码键盘实验
- 【单片机】LED实验
- 51单片机定时器实验
- 单片机串口通信实验
- 单片机时钟实验
- 单片机实验报告
- 单片机控制继电器实验
- 51 单片机串口实验
- 简单的单片机实验
- 单片机实验一
- 单片机第二次实验
- 单片机实验4
- 单片机实验五
- 单片机实验六
- Object.assign is not a function(解决)
- 标题
- 【Tomcat】Tomcat部署Web应用时出现异常
- 经典排序算法(一)--冒泡排序、快速排序java实现
- 架构设计经验杂谈
- 单片机实验三
- 软件性能测试面试题一
- Island Transport HDU
- LintCode-各位相加
- HUD 1018 Big Number
- 朴素贝叶斯
- JVM详解
- Linux/Android系统知识启动篇
- 访问控制修饰符