如何把这两个简单的单片机程序编写教程放到一起执行

如何读懂单片机程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何读懂单片机程序
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢关于51单片机的一个简单程序题_百度知道
关于51单片机的一个简单程序题
已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:
MOV DPTR,#4000H
MOVC A,@A+DPTR
MOVC A,@A+DPTR
我有更好的答案
30H;查表a= 【4004h】=30
MOVC A,有一个push必须跟一个pop,@A+DPTR
,所以在子程序里不能乱用栈,必须让sp指向原pc值的保存处,一般来说,30H;查表 a=【4005h】=50
,50H注意 ret 与reti 的作用 调用子程序时先保护pc即把pc压入栈,ret用于子程序最后来恢复pc值;a入栈,50H,80HPOP
MOV DPTR,#4000H;sp-1=50
MOV B,sp+1=51
;程序返回,sp-2=50,并且把52·51里的值出栈给pc pc=5030
MOVC A,@A+DPTR
采纳率:17%
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何把几个程序同时拷入单片机_百度知道
如何把几个程序同时拷入单片机
我有更好的答案
这个可能办不到,单片机其实就是一个死循环都是一个起始地址开始运行的,下一个程序会把前一个程序擦掉!!
采纳率:64%
来自团队:
在打开不同的文件时,然后想怎么下载怎么下载,关键是bootloader你怎么写、数据下载、甚至一个函数代码块都可以下载到单片机,很多芯片编程软件是可以设定载入的起始地址的2 在编写程序时,写入单片机哪里就写到哪里,什么程序升级,使用开发环境支持的方式定位代码的位置3 写个自己的bootloader可以的,一般有两种方式:1 使用芯片编程软件
用的是STC89C52单片机
为您推荐:
其他类似问题
您可能关注的内容
单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机中 怎么样才能把两个并列的程序放一起呢,比如:程序A和B,先运行A,运行完紧接着运行B_百度知道
51单片机中 怎么样才能把两个并列的程序放一起呢,比如:程序A和B,先运行A,运行完紧接着运行B
A,#7,NEXT1
我有更好的答案
在MAIN_A的最后加一条跳转指令,或者直接把MAIN_B的代码拷贝到MAIN_A后面
这个我试过
貌似行不通的
对程序会有影响
有别的办法吗
这只是程序跳转问题,不会有什么影响,除非你的程序写的有问题,定义冲突什么的
采纳率:33%
用LJMP指令跳转到想要运行的地方。
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机程序,怎么把几个程序合并在一起,讲解思路和程序 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
单片机程序,怎么把几个程序合并在一起,讲解思路和程序
11:37:38  
本帖最后由 agy123 于
11:48 编辑
大家好,刚刚入门51单片机,学习了些简单的程序,
1、点亮led灯程序(p1^0到p1^7低电平点亮)
2、6位共阴数码管显示程序(两个 573 锁存器 IO 口接 P0.0~P0.7&&DU P2.6&&段选信号控制 74HC573-1 锁存器,WE P2.7&&位选信号控制 74HC573-2 锁存器)
3、矩阵键盘程序(p3^0到p3^7)
4、红外程序(红外接收头p3^2)
想写个这样的程序
按矩阵键盘的1 LED灯亮 (p1^0)& && &&&再次按1,LED灯灭,同时数码管上面显示数字1
按矩阵键盘的2 LED灯亮&&(p1^1)& && &&&再次按2,LED灯灭,同时数码管上面显示数字2
还可以用红外遥控器
按遥控器1键 LED灯亮 (p1^0)& && &&&再次按1,LED灯灭,同时数码管上面显示数字1
按遥控器2键LED灯亮&&(p1^1)& && &&&再次按2,LED灯灭,同时数码管上面显示数字1
在下跟帖中有红外程序和矩阵键盘程序
11:38:34  
/*-----------------------------------------------
&&名称:遥控器红外解码数码管显示
&&内容:按配套遥控器上1-9会在数码管上对应显示
------------------------------------------------*/
#include&reg52.h&& & //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit IR=P3^2;&&//红外接口标志
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^6;//定义锁存使能端口 段锁存
sbit LATCH2=P2^7;//& && && && && &&&位锁存
/*------------------------------------------------
& && && && && & 全局变量声明
------------------------------------------------*/
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char&&//红外用全局变量
bit irpro_ok,
unsigned char IRcord[4];
unsigned char irdata[33];
/*------------------------------------------------
& && && && && && &函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);
/*------------------------------------------------
& && && && && & 定时器0初始化
------------------------------------------------*/
void TIM0init(void)//定时器0初始化
&&TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
&&TH0=0x00; //重载值
&&TL0=0x00; //初始化值
&&ET0=1;& & //开中断
&&TR0=1;& &
/*------------------------------------------------
& && && && && && &外部中断0初始化
------------------------------------------------*/
void EX0init(void)
IT0 = 1;& &//指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;& &//使能外部中断
EA = 1;& & //开总中断
/*------------------------------------------------
& && && && && && &定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
&&irtime++;&&//用于计数2个下降沿之间的时间
/*------------------------------------------------
& && && && && && &外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
&&static unsigned char&&i;& && && && & //接收红外信号处理
&&& && && && && & //是否开始处理标志位
if(startflag)& && && && && && && && &
& & if(irtime&63&&irtime&=33)//引导码 TC9012的头码,9ms+4.5ms
& && && && && && && && &i=0;
& & & & & & & & & & irdata[i]=//存储每个电平的持续时间,用于以后判断是0还是1
& & & & & & & & & & irtime=0;
& & & & & & & & & & i++;
& && & & & & & & & & & & &&&if(i==33)
& && && & & & & & & & & & & & {
& & & && && & & & & & & & & & & &&&irok=1;
& & & & & & & & & & & & & & & &&&i=0;
& & & && && & & & & & & & & & & & }
& && && & }
&&& & & &&&else
& & & & & & & & {
& & & & & & & & irtime=0;
& & & & & & & & startflag=1;
& & & & & & & & }
/*------------------------------------------------
& && && && && && &键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序
& && & switch(IRcord[2])//判断第三个数码值
& & & && && && & {
& & & & & & & & & & & &&&case 0x0c:DataPort=dofly_DuanMa[1];//1 显示相应的按键值
& & & & & & & & & & & &&&case 0x18:DataPort=dofly_DuanMa[2];//2
& & & & & & & & & & & &&&case 0x5e:DataPort=dofly_DuanMa[3];//3
& & & & & & & & & & & &&&case 0x08:DataPort=dofly_DuanMa[4];//4
& & & & & & & & & & & &&&case 0x1c:DataPort=dofly_DuanMa[5];//5
& & & & & & & & & & & &&&case 0x5a:DataPort=dofly_DuanMa[6];//6
& & & & & & & & & & & &&&case 0x42:DataPort=dofly_DuanMa[7];//7
& & & & & & & & & & & &&&case 0x52:DataPort=dofly_DuanMa[8];//8
& & & & & & & & & & & &&&case 0x4a:DataPort=dofly_DuanMa[9];//9
& && && && & default:
& & & & & & & & & & & &&&}
& & & & & & & && &irpro_ok=0;//处理完成标志
/*------------------------------------------------
& && && && && & 红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
&&unsigned char i, j,
&&unsigned char cord,
&&for(i=0;i&4;i++)& && &//处理4个字节
& && &for(j=1;j&=8;j++) //处理1个字节8位
& && && &{
& && && & cord=irdata[k];
& && && & if(cord&7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
& && && && & value|=0x80;
& && && & if(j&8)
& & & & & & & && &&&{
& & & & & & & & & & & &&&value&&=1;
& & & & & & & & & & & & }
& && && &&&k++;
& && && &}
& &&&IRcord[i]=
& &&&value=0;& &&&
& & & &&&irpro_ok=1;//处理完毕标志位置1
/*------------------------------------------------
& && && && && && &&&主函数
------------------------------------------------*/
void main(void)
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
&&LCD1602=0;
&&DataPort=0 //取位码 第一位数码管选通,即二进制
&&LATCH2=1;& && &//位锁存
&&LATCH2=0;
while(1)//主循环
& & if(irok)& && && && && && && && &//如果接收好了进行红外处理
& & & && &{& &
& & & && & Ircordpro();
& & & && & irok=0;
& & & && &}
& & if(irpro_ok)& && && && && && & //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
& & & && &{
& & & && & Ir_work();
&&& & & && &}
11:39:22  
矩阵键盘程序
#include &reg52.h&& & & & & & & & & & //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;& & & & & & & & //申明U1锁存器的锁存端& & & &&&HJ-C52&&HL-1 P2.6
sbit wela=P2^7;& & & & & & & & //申明U2锁存器的锁存端& & & & & & & & & & & &&&HL-1 P2.7
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)& & & & & & & & & & & & & & & &
& & & & uint i,j;
& & & & for(i=i&0;i--)& & & & & & & && && & //i=xms即延时约xms毫秒
& & & & & & & & for(j=110;j&0;j--);
void display(uchar num)
& & & & P0=table[num]; //显示函数只送段选数据
& & & & dula=1;
& & & & dula=0;
void matrixkeyscan()
& & & & uchar temp,
& & P3=0& &//
& & temp=P3;
& & temp=temp&0xf0;
& & if(temp!=0xf0)
& && &delayms(10);
& & & && &temp=P3;
& & & && &temp=temp&0xf0;
& && &if(temp!=0xf0)
& && &&&temp=P3;
& && &&&switch(temp)
& && && & case 0xee:& & & &&&//
& && && && && &key=0;
& && && && && &
& && && & case 0xde:& & & & //
& && && && && &key=1;
& && && && && &
& && && & case 0xbe:
& && && && && &key=2;
& && && && && &
& && && & case 0x7e:
& && && && && &key=3;
& && && && && &
& && && &}
& && && &while(temp!=0xf0)
& && && &{
& && && &&&temp=P3;
& && && &&&temp=temp&0xf0;
& && && &}
& && &&&display(key);
& & temp=P3;
& & temp=temp&0xf0;
& & if(temp!=0xf0)
& && &delayms(10);
& && &temp=P3;
& && &temp=temp&0xf0;
& && &if(temp!=0xf0)
& && &&&temp=P3;
& && &&&switch(temp)
& && && & case 0xed:
& && && && && &key=4;
& && && && && &
& && && & case 0xdd:
& && && && && &key=5;
& && && && && &
& && && & case 0xbd:
& && && && && &key=6;
& && && && && &
& && && & case 0x7d:
& && && && && &key=7;
& && && && && &
& && && &}
& && && &while(temp!=0xf0)
& && && &{
& && && &&&temp=P3;
& && && &&&temp=temp&0xf0;
& && && &}
& && && &display(key);
& & temp=P3;
& & temp=temp&0xf0;
& & if(temp!=0xf0)
& && &delayms(10);
& && & & && &temp=P3;
& && &temp=temp&0xf0;
& && &if(temp!=0xf0)
& && &&&temp=P3;
& && &&&switch(temp)
& && && & case 0xeb:
& && && && && &key=8;
& && && && && &
& && && & case 0xdb:
& && && && && &key=9;
& && && && && &
& && && & case 0xbb:
& && && && && &key=10;
& && && && && &
& && && & case 0x7b:
& && && && && &key=11;
& && && && && &
& && && &}
& && && &while(temp!=0xf0)
& && && &{
& && && &&&temp=P3;
& && && &&&temp=temp&0xf0;
& && && &}
& && &&&display(key);
& & P3=0xf7;
& & temp=P3;
& & temp=temp&0xf0;
& & if(temp!=0xf0)
& && &delayms(10);
& && &temp=P3;
& && &temp=temp&0xf0;
& && &if(temp!=0xf0)
& && &&&temp=P3;
& && &&&switch(temp)
& && && & case 0xe7:
& && && && && &key=12;
& && && && && &
& && && & case 0xd7:
& && && && && &key=13;
& && && && && &
& && && & case 0xb7:
& && && && && &key=14;
& && && && && &
& && && & case 0x77:
& && && && && &key=15;
& && && && && &
& && && &}
13:46:51  
& && && && &&&定义头文件
16:14:59  
你一开始可定义一个变量flag = 0,然后在中断里或者在主函数里调用按键扫描的函数,按下某一个按键flag的值就更改,比如按键1,flag就变为0.然后你在main()里面就可以写:
&&if(flag == 1)
&&led1 = 0;
else if(flag == 2)
类似这样。。。
16:32:00  
好复杂。。。。
11:02:37  
11:47:06  
受用了 受用了 受用了
14:19:07  
学习了```````谢谢
08:21:32  
学习了```````谢谢
17:05:54  
学了几天还是没多少映象,看来还是老老实实搞模电了。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 单片机简单程序代码 的文章

 

随机推荐