❶ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(1)单片机源码文件说明扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
❷ 单片机C语言的延时程序源码分析,希望能帮我加注释,告诉我每句语句的含义谢谢!
H_DATA BIT P3.2 将p3.2引脚命名为H_DATA,以后用H_DATA就能代表P3.2
H_CLK BIT P3.4 同上,将P3.4命名为H_CLK
?PR?DELAY30US SEGMENT CODE 函数DELAY30US声明
PUBLIC DELAY30US
RSEG ?PR?DELAY30US
; abc XDATA 0A00H
;35.8US
DELAY30US: 函数体
PUSH 05H ;2因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
MOV r5,#50 ;25 为R5赋值
DE30S1:
DJNZ r5,DE30S1 ;2*14=28 对R5减一,判断不等于零跳到DE30S1;等于零退出
POP 05h ;2把进入函数前的R5恢复
RET 函数返回
;******************************************************************
?PR?DELAY10US SEGMENT CODE 声明DELAY10US函数
PUBLIC DELAY10US
RSEG ?PR?DELAY10US
;16.3US
DELAY10US: DELAY10US函轿段数体
PUSH 05H ;2因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
MOV r5, #20 ;10为R5赋值
DE10S1:
DJNZ r5, DE10S1 ;5*2=10对R5减一,判断不等于零跳到DE10S1;等于零退出
POP 05H ;2把进入函数前的R5恢复
RET 函数返回
?PR?CLSSIGNAL SEGMENT CODE 声贺雹明函数CLSSIGNAL
PUBLIC CLSSIGNAL
RSEG ?PR?CLSSIGNAL
CLSSIGNAL:
;WHEN SYSTEM SEND INFORMATION TO PINPAD, SEND STOP BIT AT END, THEN NEXT A
;SEND OPERATION. SO WAITTING STOP BIT FINISHED.
CLSL1:
PUSH 05H 因为函数用到R5,所以将进入函数之前的R5压入堆栈,返回前提出
CLSL1_U:
MOV R5, #6EH 对R5赋值
CLSL2: JNB H_DATA, CLSL1_U 判断p3.2不为零跳转,继续闭拍誉赋初值
JNB H_CLK, CLSL1_U 判断p3.4不为零,继续赋初值
DJNZ R5, CLSL2 如果两个输入都为零对r5减一,不为零跳到clsl2
POP 05H
RET
END
❸ 单片机上的源代码和固件有什么区别
源代码就是人能看懂的程序代码,通常说写程序也就是写的源代码;固件是源码经过编译过后生成的目标程序,是二进制代码,一般为bin或hex格式,烧录进单片机能够被识别和执行。
❹ 什么是51单片机源程序
专门为51单片机设计的程序,可以是C程序,也可以是汇编程序。但如果是C程序,兼容性很强,不但51单片机能用,其它类型的CPU也可以用;如果是汇编程序,则指令必须是51单片机指令集规定的。不管是哪种程序,最终生成的二进制机器码能够在以8051为核的CPU上正确运行。
❺ 单片机源代码每一步的作用给予解释!谢谢
ORG 07B0H
MOV R2,00H;这个错了吗?如果有#是将00赋值给R2,如果没有就是将00H中的值给R2
MOV R3,#00H;00赋值给R3
MOV R4,#10H;10赋值给R4
MOV R5,#00H;00赋值给伍岁姿R5
MOV R6,#00H;00赋值给R6
MOV R7,#08H;08赋值给R7
SE22: MOV DPL,R3;将R3中的数放到寄存器DPTR的低位
MOV DPH,R2;将R2中的数放到寄存器DPTR的高位
MOVX A,@DPTR;将DPTR指向的地址中的值放到A中
MOV DPL,R5;将R5中的数放到寄存器DPTR的低位
MOV DPH,R4;将R4中的数放到寄存器DPTR的高位
MOVX @DPTR,A;将A中的值放到DPTR指向的地址中
CJNE R3,#0FFH,LO42;当R3等于FF时向下执行,否则跳到LO42
INC R2;R2中的值加1
LO42: INC R3;R3中的值加1
CJNE R5,#0FFH,LO43;当R5等于FF时向下执行,否则跳到LO43
INC R4;R4中的值加1
LO43: INC R5;R5中的值加1
CJNE R7,#00H,LO44;当R7等于00时向腔绝下执行,否则跳到LO43
CJNE R6,#00H,LO45;当R6等于00时向下执行,否则跳到LO43
SJMP $;在原地跳
NOP;空雀哗指令
LO44: DEC R7;R7值自减1
SJMP SE22;跳到SE22
LO45: DEC R7;R7值自减1
DEC R6;R6值自减1
SJMP SE22;跳到SE22
END
❻ 单片机语言 include<reg52.h>是什么意思
include是预编译指令,include<reg52.h>的作用就是将52单片机的头文件reg52.h嵌入源文件中。
预处理器发现 #include 指令后,就会寻找指令后面<>中的文件名,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include 指令, 就像把被包含文件中的全部内容键入到源文件中的这个位置一样。
<reg52.h>表示调用了52或者51单片机的资源,也就是可以直接对单片机的相关寄存器与引脚进行操作,十分方便。
(6)单片机源码文件说明扩展阅读:
reg52.h中特殊字节寄存器说明:
sfr P0 = 0x80; // P0口特殊寄存器寻址位
sfr P1 = 0x90; // P1口特殊寄存器寻址位
sfr P2 = 0xA0; // P2口特殊寄存器寻址位
sfr P3 = 0xB0; // P3口特殊寄存器寻址位
sfr PSW = 0xD0; //程序状态字寄存器
sfr ACC = 0xE0; //累加器
sfr B = 0xF0; //B 特殊寄存器
sfr SP = 0x81; //堆栈指针寄存器
sfr DPL = 0x82; //数字指针(低位)
sfr DPH = 0x83; //数字指针(高位)
sfr PCON = 0x87; //电源控制寄存器
sfr TCON = 0x88; //定时器/计数器0和1控制
sfr TMOD = 0x89; //定时器/计数器0和1模式
sfr TL0 = 0x8A; //定时器/计数器0低8位寄存器
sfr TL1 = 0x8B; //定时器/计数器1低8位寄存器
sfr TH0 = 0x8C; //定时器/计数器0高8位寄存器
sfr TH1 = 0x8D; //定时器/计数器1高8位寄存器
sfr IE = 0xA8; //中断允许寄存器
sfr IP = 0xB8; //中断优先寄存器(低)
sfr SCON = 0x98; //串口控制寄存器
sfr SBUF = 0x9 9; //串口数据缓冲器
❼ 什么是单片机源程序
首手锋配先,源程序就毕指是通过用某种编程语言编码后,利用编译器编译成相应的可执行文件。
那么单片机的源基销程序就是,利用keil将写好的c代码文件编译成可执行的.HEX文件。