① 如何将单片机片内 20H 到 50H 单元赋值
ORG 0000H
LJMP START
START:
MOV R6, #08;学号8号
MOV R5,#80H;作为递增或递减结果缓存,初始值80H
MOV R0,#20H;存储空间的起始地址
MOV R4,#31H;存储空间中共有31个单元
LOOP1:
MOV A,R5
;先把缓存写入存储单元
MOV @R0,A
INC R0
DJNZ R4,INC_INC;每次R4都先会减一,减一之后等于0就执行下一行,否则就跳转
;赋值完成
SJMP SEARCH_AA
INC_INC:
MOV A,R5
ADD A,R6 ;递增
CJNE A,#0BBH,NE_BB;与最大值BBH比较,相等就执行下一行指令,不相等就跳转到NE_BB,同时若A的值大于或者等于BBH,则C=0,否则C=1。
;等于 bbh,直接写入缓存
LESS_BB:;小于 bbh,也直接写入缓存
MOV R5,A
SJMP LOOP1
NE_BB:
JC LESS_BB
;大于 bbh,要开始递减
;MOV R5,#0BBH;从BB开始递减
;SJMP DEC_DEC
DEC_DEC:
MOV A,R5
SUB A,R6;递减
CJNE A,#80H,NE_80;与最小值80H比较,相等就执行下一行指令,不相等就跳转到NE_80,同时若A的值大于或者等于80H,则C=0,否则C=1。
;等于 80h,直接写入缓存
GREATER_80:;大于 80h,也直接写入缓存
MOV R5,A
MOV @R0,A
INC R0
DJNZ R4,DEC_DEC;每次R4都先会减一,减一之后等于0就执行下一行,否则就跳转
;赋值完成
SJMP SEARCH_AA
NE_80:
JNC GREATER_80
;MOV R5,#80H;从80开始递增
SJMP INC_INC
SEARCH_AA:
MOV R0,#20H;存储空间的起始地址
MOV R4,#31H;存储空间中共有31个单元
MOV 51H,#00;先清零
SEARCH_NEXT:
MOV A, @R0
CJNE A,#0AAH,NE_AA;
;有 AAH 这一数据
MOV 51H,#01
SJMP ENDEND
NE_AA:
DJNZ R4,SEARCH_NEXT
SJMP ENDEND
ENDEND:
END
② 单片机中断程序中为什么要重新赋值
这个太好理解啦,就像你用一只桶来装水,你知道这只桶能装10公斤水就会溢出。你如果想往桶里装2公斤水想让他溢出,你就得先给它装进8公斤水。溢出以后你知道装了2公斤他满啦(满了以后会自动全部倒掉,是空的啦),下次如果还是需要装2公斤就让他溢出,你不是还得先装进8公斤水吗?不然2公斤水怎么会溢出呢?呵呵,简单吧!
按计数寄存器的原理也是一样的,一般每秒到65535才会溢出,如果你的单片机根据晶振频率和预分频的结果是每秒15625,那么你就得给计数寄存器先赋值49910,也就是C2F6。溢出后(计数寄存器的数值会自动清0),下次中断产生也需要在15625的时候,这个时候如果是没有预先的49910,就不能达到65535的溢出条件,就不会产生中断,所以每次执行玩这个中断程序都要给计数寄存器赋值。除非你只用一次溢出中断,可以不用再赋值。
③ C语言 单片机IO口赋值
首先要弄清楚io口的赋值!!
使用并行输数据只能八位。所有,oxfffe要取出高八位和低八位!!
因为不存在取单独某位的问题,所有可以使用简单的移位语句
p1=(oxfffe<<8);
//左移八位,得p1=oxfe
p2=(oxfffe>>8);
//右移8位,得p2=oxff
你这个程序的错误在于,p1口使用并行方法输送数据只能一次传输8位,而oxfffe位十六位,溢出错误!!
④ 51单片机赋值
CHRAM:
MOV DPTR,#6000H
MOV R2,#21H
MOV A,#0FH
LOOP:
MOVX @DPTR ,A
INC DPTR
DJNZ R2,LOOP
MOV DPTR,#6000H
MOV R2,#21H
LOOP1:
MOV DPH,#60H
MOVX A,@DPTR
MOV DPH,#50H
MOVX @DPTR,A
INC DPTR
DJNZ R2,LOOP1
RET
⑤ 单片机数组赋值问题!
这个程序我已经调试过可以使用,放到数组中应该为了用数码管显示吧
uchar
i=0,j=0,z=0,m=0;
//i-整数位数,j-小数位数
float
a=0,b=0;
//a-整数,b-小数
uint
c=0,d=0;
uchar
k[8]={0};//数组设大一点没关系的
adval=P1
a=ad_vol;
ad_vol=(float)adval*5.0/255
d=a;
c=a;
while(c)
{
k[i]=c%10;
c=c/10;
i++;
}
for(
m=0;m
评论
0
0
加载更多
⑥ 单片机中th0,tl0赋值什么用
单片机中,th0、tl0是定时器0的计数单元,实行加计数。对th0、tl0赋值也叫赋初值,目的就是在此基础上再计数多少次th0、tl0同时等于0(发生溢出)。
⑦ 51单片机的寄存器如何赋值
这要看是写什么程序了,用汇编写程序,用MOV指令,直接寻址方式赋值,如
MOV TMOD , #20H
MOV TH0 , #3CH
MOV TL0 , #0B0H
用C语言写程序就更简单,也好理解,还是上面三个寄存器赋值
TMOD=0x20;
TH0=0x3c;
TL0=0xb0;
⑧ 单片机赋值问题
这样说你明白了么
⑨ 51单片机引脚赋值
可以的,P3=0x01;P3<<=1;那么结果是:P3=0x02;C=0
P3=0x01;_crol_(P3,1);那么结果是:P3=0x02;C不变。
⑩ 单片机赋值单片机为什么是拿16进制的值来赋值
首先,赋几进制的值对单片机来说是一样的。因为经过编译之后都是二进制,单片机也只认识二进制。
赋值时使用16进制是为了我们容易看。
因为单片机的寄存器很多都是按位设置的,与之对应的就是二进制。但是二进制第一不容易书写,第二不容易阅读,这两点对于程序来说是致命的。16进制最接近二进制,每一位代表4位二进制,熟练以后一眼就能看出对应的二进制是多少,容易书写、容易阅读、又不容易出错。所以就用16进制了。