
PSW=AAH=101 01 010B,其中的RS1,RS0=01,指向了1区的工作寄存器,这时的R0是08H单元的,而先由MOV @R0,#12H,(R0=8)即先给08H单元送数12H,所以,执行MOV PSW,#0AAH以后,R0就指向08H单元了,所以,运行程序后的R0=12H。当去掉这条语句,R0就是0区的,就是00H单元的R0,所以是8。
不过,有点不明白,你写的这几条语句有什么用啊,就是为了胡乱写几条指令玩一下,让单片机执行吗,可是执行后的结果你又分析不明白,那为什么还要写这几条指令呢。
#include<reg52h>
#define uchar unsigned char
#define duan P0 //共阴数码管的阳极端口
sbit wei1=P2^4; //共阴数码管的阳极端口,我的是四位的,下面语句中把1,2关了,只用到了3,4。
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0~9的十六进制码
void delay(uchar xms) //软件延时
{
int i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
void display(int tens,ones) //用来显示数字的函数,显示此时的十位,个位。
{
int i,j;
for(i=2;i>0;i--)//通过改变i和j的值,可以改变计时时间。
for(j=50;j>0;j--)
{
wei3=1;//扫描原理。
wei4=0;
duan=num[tens];
delay(5);
wei3=0;
wei4=1;
duan=num[ones];
delay(5);
}
}
void main()
{
int onesp=0,tensp=0;//定义ones place和tens place。
wei1=0;
wei2=0;
while(1)
{
for(tensp=9;tensp>=0;tensp--)
{
for(onesp=9;onesp>=0;onesp--)
{
display(tensp,onesp);//调用函数显示此时的数字。
}
}
}
}
这个程序测试可用,从99计数到00。只用了比较简单知识,不涉及定时器和系统中断。不懂可以追问。
1 新建工程,这时会让你选择要不要加入KEIL的启动代码,随便选(最好选是)
2 新建新文件,保存为xxasm或xxa51
3 把刚才的文件加入到工程
4 如果你开始时选否,即未加入启动代码,那么启动跳转、堆栈SP的初始化、
内存初始化、重入栈初始化、标准51寄存器定义、段定位等都要自己弄,估计你搞
不定,但是这样你可以自由写
5 如果你选的是加入KEIL的启动文件,那么这些你就不必写,都好了,但是问题是这个启动文件
最初的目的是针对C51程序写的,因为这个启动文件的最后一句是去调用main()函数段,所以你
要么把这个main()函数段的申明和调用都去掉,让他去调用你自己 的函数段,要么你就干脆写个他想调用的那个main函数段段名,让他以为 就是main函数,让他调用好了
6 再简单一点,你也别新建什么文件,直接删掉它的最后一句main调用和main函数段申明,就在删掉 的那里写自己的程序
7 再再简单一点,启动文件也别要了,直接新建asm文件,从地址0开始写 ORG 0000H,如果你的程序足够简单, 也不一定要什么函数段、不一定要修改SP、更不必关心什么重入呀、初始化代码呀
8 如果你问的不是51汇编,那就不知道了
500HZ方波周期是2ms,只需定时器1ms,将管脚状态取反一次就其可,若按下按键,改为定时500us即可,程序如下:
#include <reg51h>
sbit key=P1^0;
void main()
{
unsigned int n=1000;
TMOD=0X01;//定时器0工作方式1
TH0=(65536-N)/256;//定时器初值,先是定时1000US
TL0=(65536-N)%256;
ET0=1;//开定时器0中断
EA=1;//开总中断
TR0=1;//启动定时器0
while(1)
{
if(key==0)//判断按键是否按下
{
delay_ms(20);//延时消抖动
if(key==0)n=500;
}
}
}
中断程序如下:
void timer0() interrupt 1
{
TH0=(65536-N)/256;
TL0=(65536-N)%256;
P2^0=~P2^0;//P20输出方波
}
延时子程序略
以上就是关于我在keil里面写了这样的程序MOV R0,#1然后运行,为什么没有结果全部的内容,包括:我在keil里面写了这样的程序MOV R0,#1然后运行,为什么没有结果、keil写程序 单片机二位数码管显示倒计时、keil里面怎么建立汇编并写出详细步骤。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)