实验目的:点亮二极管。实验参考:笨笨工作室 实验二、基本I/O口试验二:跑马灯。(查看原文)实验板: FB51A(查看)。 正如学一门编程语言时第一个程序"Hello World!"一样, "流水灯"(也叫跑马灯)算是学习单片机的第一个程序吧!电路如下: 汇编: org 0000h mov a,#0fehloop: mov p0,a lcall delay rl a ajmp loopdelay: mov r6,#2h ; djnz为二周期指令,机器周期为振荡周期的12倍.所以延时时间为:temp: mov r5,#0ffh ; 2×255×2×12×(1/12) =1ms,人眼分辨不出 djnz r5,$ djnz r6,temp retend★ 下载到实验板上并未看到预想的结果,八个LED都呈半亮状态。这是由于延时为1ms,人眼分辨不出闪烁的间隔,将延时时间增长如下: org 0000h mov a,#0fehloop: mov p0,a lcall delay rl a ajmp loopdelay: mov r7,#100 ;djnz为二周期指令,机器周期为振荡周期的12倍.所以延时时间为:temp1: mov r6,#02h ;100×2×255×2×12×(1/12) =100ms,temp2: mov r5,#0ffh djnz r5,$ djnz r6,temp2 djnz r7,temp1 retend★ 下载到实验板,这次可以看到最终结果,即LED从右(D0)到左(D7)循环点亮。 C51实现: 参考了AS综合系统的例程,才开始研究C51,还未从0写起,学习ing……#include <reg51.h>#include <intrins.h>void delayms(unsigned char ms) // 延时子程序{ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }} main(){ unsigned char LED; LED = 0xfe; P0 = LED; while(1) { delayms(250); LED = _crol_(LED,1); //循环右移1位,点亮下一个LED P0 = LED; }} 用Proteus仿真见: 【008】Proteus 第一次亲密接触

评论