导航:首页 > 操作系统 > 单片机赋值

单片机赋值

发布时间:2022-04-16 02:12:19

① 如何将单片机片内 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进制了。

阅读全文

与单片机赋值相关的资料

热点内容
鸿蒙加密等级 浏览:804
cocos2dluapdf 浏览:491
假的加密锁靠谱吗 浏览:176
经营圣手服务器怎么调 浏览:749
arduino手机编程 浏览:481
西医pdf下载 浏览:29
后浪电影学院pdf 浏览:813
程序员怎么做到不被人嫉妒 浏览:669
cmd新建文件夹md命令 浏览:570
php数组中的数值排序 浏览:832
安卓手机怎么避免小孩内购 浏览:171
联想服务器出现黄色叹号怎么办 浏览:991
约翰编译器制作教程 浏览:130
大地pdf 浏览:109
pdfplus 浏览:577
汇编O命令 浏览:970
plt转pdf 浏览:366
魔兽60宏命令大全 浏览:480
php志愿者网站源码 浏览:875
贸易pdf 浏览:499