单片机程序解释

单片机程序解释,第1张

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个是参数。 看意思是 取高位。

以上就是关于单片机程序解释全部的内容,包括:单片机程序解释、单片机程序说明解释、求一高手解析一下单片机源程序,每一步的意思,表达了什么,可追加分数。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9419655.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存