1、
ORG 0000H //程序入口
LJMP START //跳到START处
ORG 000BH //定义定时器/计数器T0的中断入口地址
LJMP T0_INT //跳到T0_INT处,即T0中断的服务程序标号
START:
MOV TMOD, #02 //设置定时器/计数器的工作方式,这里为方式2,8位的常数自动重装
MOV TH0, #6 //定时器置初值,T0的高位
MOV TL0, #6 //定时器置初值,T0的低位
MOV R7, #40 //赋值
MOV R6, #50 //赋值
CLR P34 ;输出低电平,开始响了// P34位清零
SETB TR0 //启动定时器
LLLL:
JNB TF0, $ ;等待 //等中断时间到
CLR TF0 //定时器的溢出标志位清零
DJNZ R7, LLLL
MOV R7, #40
DJNZ R6, LLLL //循环中断,一直让时间间隔满足05秒
MOV R6, #50
CPL P34 ;输出高电平,停止发音 // P34 取反
CLR TR0 //关闭定时器
SJMP $
END
2、 ORG 0000H //程序的入口地址
LJMP START //跳到START处
ORG 000BH //定义定时器T0的中断入口地址
LJMP T0_INT //跳到T0的中断服务程序处
START:
MOV TMOD, #02 //设置定时器/计数器的工作方式,这里为方式2,8位的常数自动重装
MOV TH0, #6 //定时器置初值,T0的高位
MOV TL0, #6 //定时器置初值,T0的低位
SETB TR0 //启动定时器T0
MOV IE, #10000010B 开启允许总中断和T0中断
MOV R7, #40 //赋值
MOV R6, #50 //赋值
SJMP $ //等待中断
T0_INT: // 中断服务程序
DJNZ R7, T0_END
MOV R7, #40
DJNZ R6, T0_END
MOV R6, #50 //以上的都是为了让时间足够
CPL P34 // P34取反
T0_END:
RETI //子程序返回
END
ORG 0 //开始位置地址,0x00 START: MOV R2,#8 //将8写入R2寄存器 MOV A,#0FEH //将0xfe写入A SETB C //进位标志位C(CY)置1 LOOP: MOV P1,A //将A里面的数值送到P1口 LCALL DELAY //长跳转,跳到DELAY RLC A //A数值左移一位,最高位移进C,C移到A最低位 DJNZ R2,LOOP //R2减一,判断不等于0,跳转到loop MOV R2,#8 //将8写入R2寄存器 LOOP1: MOV P1,A //将A里面的数值送到P1口 LCALL DELAY //长跳转,跳到DELAY RRC A //A数值右移一位,最高低位移进C,C移到A最高位 DJNZ R2,LOOP1 //R2减一,判断不等于0,跳转到LOOP1 LJMP START //跳转到START DELAY: MOV R5,#20 ;//DELAY 函数,延时作用 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET //返回到断点 END//结束指令
#include<reg52h> //头文件,定义硬件相关的寄存器等
#define uchar //宏,下面中的uchar 全部用unsigned char替代。编译器处理的第一步
sbit P3_4=P3^4; //sbit单片机特有的位变量地址类型,相当于给p34引脚重命名
//数码管的显示编码,要显示5就把tab[5]的值输出到对应引脚;code也是
//单片机特有,tab数组存到代码区,不占用内存
code uchar tab[10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef,};
//c程序从main开始看。
main()
{
//开机扫描按键
void KEY();
//寄存器设置,这些都在头文件定义。以下是定时器初始化,具体数值查数据手册
TMOD=0x15;
IE=0X88;
TH1=0X3C;
TL1=0XB0;
TR0=1;
TR1=1;
a=0;
//mian通常 初始化 + 大循环;循环没内容,肯定加了中断,
//从void scjs(void)interrupt 3 中断入口看
while(1);
}
//全局变量设太多。。。。没时间看
这是一个令单片机P00脚
输出信号
不断翻转(高电平,
低电平
)的程序
高低电平
持续时间由延迟
子程序
DEL决定,DEL子程序中的
R5
,R6,
R7
三个寄存器中的值控制着延迟时间,
================================
MAIN:
MOV
P0,#0FEH
;P00低电平
ACALL
DEL
MOV
P0,#0FFH
;P00高电平
ACALL
DEL
AJMP
MAIN
================================
DEL中的R5,R6,R7的值是根据单片机
机器周期
(单位us)来确定的,周期=12/
晶振
频率(us)
==================================
按你提供的数据,DEL子程序共花了522000个左右的机器周期(没精确计算)如果晶振频率为12MHZ,即延迟时间05秒
===========================
ORG OOH //程序开始
START:JB P30,LIG //如果P30等于0,跳转到LIG
CLR P10 //赋值,P10=0
SJMP START //跳转到START
LIG: SETB P10 //置一,P10=1
SJMP START //跳转到START
END //结束
整个程序的作用就是:判断P30的状态。如果P30=1,则P10=1;如果P30=0,则P1=0。
ISP_ERASE(0x2c00); //执行 ISP_ERASE(int16 data)函数,0x2c00是形参。
ISP_PROGRAM(0x2c00, SET_H/256);
ISP_PROGRAM(0x2c01, SET_H);
ISP_PROGRAM(0x2c02, SET_L/256);
ISP_PROGRAM(0x2c03, SET_L);
这几个都是一样的。SET_H、SET_L。这2个是参数。 看意思是 取高位。
以上就是关于单片机程序解释全部的内容,包括:单片机程序解释、单片机程序说明解释、求一高手解析一下单片机源程序,每一步的意思,表达了什么,可追加分数。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)