51单片机编程题,用汇编语言怎么做?

作者&投稿:孛沿 (若有异议请与网页底部的电邮联系)
51单片机 用汇编语言怎么编程:几个有符号数的比较大小~

51单片机中,没有专门的有符号数比较指令,只能通过一些变通的方法来实现,比如:
比较30H和40H中有符号数的大小,结果放在R2中,大于则为1,等于为0,小于为128:
CMPDAT:
MOV A,30H
JB ACC.7,CMPF1
MOV B,A
MOV A,40H
JB ACC.7,CMPZ2 ;30H正,40H负所以30H>40H
CJNE A,B,CMPZ1 ;均为正,比较大小
MOV R2,#0
RET
CMPZ1:
JC,CMPZ2
CMPZ11:
MOV R2,#128
RET
CMPZ2:
MOV R2,#1
RET
CMPF1:
ANL A,#7FH
MOV B,A
MOV A,40H
JNB ACC.7,CMPF3 ;30H负,40H负
SJMP CMPZ11 ;30负,40H正,所以30H<40H
CMPF3:
ANL A,#7FH
CJNE A,B,CMPF10 ;两个均为负数
MOV R2,#0
RET
CMPF10:
JC CMPZ2 ;30H<40H(负数小者大)
SJMP CMPZ11 ;30H>40H

在keil工程栏中右键.c文件 选择Options for File
然后把这2个勾上

就能在C语言中嵌入汇编了。

格式是这样的

或者

在8051单片机的时钟频率为6MHz,那么定时器的计数脉冲周期就是 2uS;

sbit CP=P1^0;

void Timer0_init()

{

TMOD |=0x01;   //T0定时器,方式1,采用16位定时器

TH0 = (65536-500)/256;   //定时器装初值500, 即 1000uS 中断一次

TL0 = (65536-500)%256;

EA=1; ET0=1; TR0=1;

}


void timer0() interrupt 1

{

TH0 = (65536-500)/256;   //定时器装初值500, 1mS 中断一次

TL0 = (65536-500)%256;

CP=~CP;   //改变脉冲信号的输出状态

}


void main()

{

Timer0_init();

 CP=0; 

while(1) { }

}


汇编语言,才看到,算了,你别人的回答吧



一道小题,简单写写,就够用了。

本程序,经过了实验,符合题目要求。



可以借鉴一下




单片机编程题,用汇编语言 设计子程序,计算RAM 30H~3FH中的和,结果为1...
MOV R3, #0 ;先清零 MOV R4, #0 MOV R0, #30H ;加数首地址 MOV R2, #16 ;共加16次 LOOP:MOV A, R4 ;取来低8位 ADD A, @R0 ;加上 MOV R4, A MOV A, R3 ;取来高8位 ADDC A, #0 ;加上进位 MOV...

单片机编程题,用汇编语言 片内RAM 30H 中存放两位BCD码,将其转换成ASC...
MOV A, 30H ANL A, #0FH ORL A, #30H MOV 40H, A MOV A, 30H SWAP A ANL A, #0FH ORL A, #30H MOV 41H, A END

. 单片机编程题,用汇编语言 如果(A)=0,则将P1.0清零,否则P1.0置1
(MOV A, 数字. ;A中有了数字)JNZ ASDF ;非零转移.CLR P1.0 ;零,则将P1.0清零.SJMP QWER ;转到结束.ASDF:SETB P1.0 ;否则P1.0置1 QWER:RET ;结束本程序.END

单片机编程题:用交换指令使片内20H单元的高4位与21H单元的低4位交换...
SWAP A ;20H单元的高4位,交换到低4位 MOV R0, #21H XCHD A, @R0 ;和21H单元的低4位互相交换 SWAP A ;再交换到高4位 MOV 20H, A END

单片机编程题 有几个题做不出来!!求高手
第1题:mov dptr,#2020h movx a,@dptr xch a,20h movx @dptr,a 第2题:mov a,30h swap a mov r0,31h xchd a,@r0 swap a mov 30h,a 第3题:mov dptr,#2500h movx a,@dptr push a pop 40h 第4题:mov r0,20h mov dptr,#1000h mov 07fh,#16 loop:mov a,@r0 movx @dptr...

单片机编程题,用汇编语言,求助!! 1. 内部RAM单元从30H开始连续存放了1...
内部RAM单元从30H开始连续存放了10个数据试编程把这10个数据传送 --->>>至外部RAM 2000H开始的连续10个单元中。>>>是不是少这句话。。。ORG 0000H MAIN: MOV R0,#30H MOV DPTR,#2000H MOV R7,#10 LOOP: MOV A,@R0 MOVX @DPTR,A DJNZ R7,LOOP END ...

单片机编程题
CLR C MOV A, 40H ADDC A, 45H MOV 50H, A CLR A MOV A, 41H ADDC A, 46H DA A ; 加法调整 MOV 51H, A

单片机编程1,将R1中的低四位数与R2中的高四位数合并成一个8位数,并将...
1,MOV A, R1 ANL A, #0FH MOV R1, A MOV A, R2 ANL A, #0F0H ADD A, R1 MOV R1, A END 2,程序没有写完,字数有限制。建议另外提问。

单片机编程题。。急求
ORG 0000H MOV DPTR,#3000H;数据指针指向3000H MOVX A,@DPTR;将3000H里的数据传递给A MOV R0,A;把A数值传递给R0,R0此时保存的是3000H里的旧数值 MOV DPTR,#2000H;数据指针指向2000H MOVX A,@DPTR ;将2000H里的数据传递给A MOV R1,A ;把A数值传递给R1,R1此时保存的是2000H里的旧数值 ...

1.单片机实验:若将40H的内容改为OFH,程序应将如何修改?(写出原始程序...
根据题目描述,我们可以推断出这是一道关于单片机编程的实验题。在此,我将简要介绍一下修改40H的内容为OFH后程序应该如何修改的方法。首先,需要明确的是40H和OFH都是16进制数。40H对应10进制数为64,而OFH对应10进制数为15。因此,如果将40H的内容改为OFH,相当于将内存地址为40H的单元中存储的数值...

济阳县19832108322: 51单片机编程题,用汇编语言怎么做? -
辕伏前列: 在8051单片机的时钟频率为6MHz,那么定时器的计数脉冲周期就是 2uS; sbit CP=P1^0; void Timer0_init(){ TMOD |=0x01; //T0定时式1,采用16位定时器 TH0 = (65536-500)/256; //定时器装初值500, 即 1000uS 中断一次 TL0 = (65536-500)...

济阳县19832108322: 51单片机中如何用汇编语言编写流水灯 -
辕伏前列: 51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果.以下是程序: ;假设晶振12MHZ,P1控制8个LED低电平亮;...

济阳县19832108322: 用汇编语言编写一个51单片机的程序 -
辕伏前列: 首先搞清LED管是高电平导通还是低电平导通. 如果是低电平导通,P1赋0x00时,发光管全亮,0xff时,全灭. 具体程序: #define uint unsigned int #define uchar unsigned char void delay(uint time_out) {uint i,j;for(i=0;i<time_out;i++){for(j=0;...

济阳县19832108322: 大学80C51单片机编程题,请使用汇编语言编写,谢谢! -
辕伏前列: 1:MOV A,R1 ANL A,#0F0H XCH A,R2 ANL A,#0FH ORL A,R2 MOV R3,A2:MOV R0,#30H MOV 40H,#0 MOV 41H,#0 MOV R2,#16 LOOP: MOV A,@R0 ADD A,40H MOV 40H,A MOV A,41H ADDC A,#0 MOV 41H,A INC R0 DJNZ R2,LOOP RET3...

济阳县19832108322: 51单片机汇编语言做16位除法 -
辕伏前列: ;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7;入口: R5,R2,R3,R4,R6,R7;占用资源: ACC,B,F0;堆栈需求: 4字节;出口: (R2),R3,R4,R6,R7,OV NDIV42 : MOV A,R1 PUSH A MOV B,#00H NDV421 : MOV A...

济阳县19832108322: 单片机求助,用汇编语言写一个双位数码管0到99循环 -
辕伏前列: 一个数码管显示0005~01秒,再换另一个显示,他俩轮流这么显示着(再多几个也可以),这种交替人眼看不出来的单片机求助,用汇编语言写一个双位数码管0到99循环

济阳县19832108322: 怎样用51单片机中的汇编语言写:k1为1时8个灯从左到右亮,k1为0时灯从右到左 -
辕伏前列: K1的值你自己去赋,从p0口输出.你程序这样写:ORG 00H AJMP STARTORG 30HSTART: MOV A,#11111110BLOOP: JB K1,RIGLEF: RL A...

济阳县19832108322: 51单片机用汇编语言如何实现16位除法
辕伏前列: 我只学了一点汇编语言,只知道无符号数除法指令DIV,有符号数除法指令IDIV 用逻辑右移指令SHR常用来做除以2的N 次(N 为移位次数)的运算.

济阳县19832108322: 51单片机 用汇编语言编程 有大神帮忙写一下程序吗 -
辕伏前列: ORG 0000H LJMP MAIN ORG 001BH LJMP T1ISR ORG 0030H MAIN: MOV TMOD,#20H MOV TH1,#6 MOV TL1,#6 SETB TR1 SETB ET1 SETB EA MOV R2,#100 MOV R0,#30H MOV R1,#50 MOV DPTR,#2000H SJMP $ T1ISR: DJNZ R2,T1E MOV R2,#100 MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,T1E CLR TR1 T1E: RETI END

济阳县19832108322: 51单片机用汇编语言怎么处理浮点数?比如做除法之后的得数,这个得数之后要再进行计算. -
辕伏前列: 把小数乘以一定的值转换为整数,完成运算后再除以那个值还原原来的数,就是这样.直接用汇编写浮点数的运算,难度太大了,这样的话用C语言写好一些.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网