有关单片机的几个问题!跪求高手回答

(1)下述程序执行后,SP=?A=?B=?
ORG 2000H
MOV SP, #40H
MOV A , #30H
LCALL SUBR
ADD A, # 10H
MOV B, A
L1:SJMP L1
SUBR: MOV DPTR,#2009H
PUSH DPL
PUSH DPH
RET
(2)累加器A的内容由0递增,加到100,其结果存在累加器A中,试编写该程序。
(3)设有两个4位的BCD码,分别存放在片内RAM的50H、51H单元和60H、61H单元中。试编写求这两数之和的程序,结果存放到40H、41H单元中,数据逆序存放。
就是几个简单的单片机问题都没人答出来么?我只是烦去书上找才问的,怎么就没人给答案啊!回答正确的再加100分!

1.是个循环,而且是个死循环。他在单片机中是常要用到的,功能就是只要单片机上电它使程序不停里执行死循环里的内容!
2.这个看你的单片机的硬件电路了,你最好也先看懂硬件电路才编程。通常LED的公共端是用三极管选通的!看来你的LED是共阳极接法的,就是8个LED正极共同接到三极管的发射极,集电极接VCC,基极连到P1口的接法,如果你会三极管,应该就能看懂为什么了!P1=0,三极管正向导通,VCC加到LED上,如果LED的另一端接的是低电平,使LED正偏,则LED亮。想想吧~~
3。CPU不停地执行while(1)里面的语句,但是当有中断发生时,CPU得先去执行中断,然后才能返回到while处继续执行,也就相当等待中断了!也就是说:有中断发生CPU就立该执行中断,没有的话就一直执行while(1)里面的~~
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-11
1.执行CALL指令前SP=40H,A=30H,但是在SUBR中对SP压栈2009H,在执行RET指令后将2009H送回PC,造成单片机跳转到0x2009处继续执行指令,但这个位置不是程序中规定的指令开始地址,所以运行后A=30H,SP=42H

2.A是8位的寄存器吧?0+1+2+.....+100得到的是16位的数据,A里装不下呢,程序这么写,结果的高字节在R3,低字节在R2:
MOV R0,#101 ;0~100是101个数字
MOV R1,#00
MOV A,#0
MOV B,#0
LOOP:
CLR C
MOV A,R2
ADD A,R1
MOV R2,A
MOV R3,A
ADDC A,#0
MOV R3,A
INC R1
DJNZ R0,LOOP

3.没说清顺序呢,那我认为50H和60H是高两位数,51H和61H是低两位数:
CLR C
MOV A,51H
ADD A,61H
DA
MOV 41H,A
MOV A,50H
ADDC A,60H
DA
MOV 40H,A
MOV
第2个回答  2011-05-10
(1)下述程序执行后,SP=?A=?B=?
ORG 2000H
MOV SP, #40H
MOV A , #30H a=30h
LCALL SUBR
ADD A, #10H a=40h
MOV B, A b=40h

L1: SJMP L1
SUBR: MOV DPTR,#2009H
PUSH DPL 09h
PUSH DPH 20h
RET
所以,a=40h,b=40h,sp=2009h
第3个回答  2011-05-10
我这里有个单片机得程序看对您有用么:

RS BIT P2.0 ;LCD引脚定义
RW BIT P2.1
E BIT P2.2
DQ BIT P1.7
T_RST BIT P3.5 ;DS1302引脚定义
T_CLK BIT P3.6
T_IO BIT P3.7

SEC EQU 30H ;单片机内部RAM分配
MIN EQU 31H
HOUR EQU 32H
DAY EQU 33H
MON EQU 34H
WEEK EQU 35H
YEAR EQU 36H
TEMPL EQU 28H ;存从DS18B20读出的低位
TEMPH EQU 29H ;存高位
TEMP1 EQU 40H ;符号位与百位公用一个单元
TEMP2 EQU 41H
TEMP3 EQU 42H
TEMP4 EQU 43H ;小数位存放单元
WDL EQU 51H
WDH EQU 52H
WENDU EQU 55H
CEWEN EQU 56H
ORG 0000H
JMP START
ORG 0030H
START: MOV SP ,#70H ;设置堆栈入口
MOV HOUR,#10H ;时间设置为2011年05月15号10时0分0秒
MOV MIN,#00H
MOV SEC,#00H
MOV DAY,#15H
MOV MON,#05H
MOV WEEK,#05H
MOV YEAR,#11H
MOV WDL,#10H ;温度设置为10-30
MOV WDH,#1EH
MOV WENDU,#22H ;设定温度值20

LCALL INIT_1602 ;初始化1602入口
LCALL SETDS1302 ;初始化1302入口
LCALL GET1302
LCALL DISPLAY ;显示程序入口
LCALL INIT_1820 ;初始化入口

MAIN: LCALL DISPLAY
LCALL DELAY1
LCALL GET1302 ;读1302
LCALL GET_TEMPER ;调用读温度子程序
LCALL TOBCD ;十六转BCD码
LCALL OUTPUT
JMP MAIN

OUTPUT:
CLR C
MOV A,56H
CJNE A,52H,PD1 ;不等则转PD1
SJMP BUBAOJING
PD1: JC BUBAOJING ;Cy=1则转
SJMP BAOJING1
CLR C
MOV A,56H
CJNE A,51H,PD2
PD2: NOP
JC BAOJING2
RET

BAOJING1: SETB P2.6 ;报警
RET

BAOJING2: SETB P2.7 ;低温加热
SETB P2.6
RET

BUBAOJING: CLR P2.7
CLR P2.6
RET

;****************************进入1602 进入1602 进入1602 **************************8

INIT_1602: LCALL DELAY5 ;初始化1602 获得稳定电流
LCALL DELAY5
LCALL DELAY5
MOV P0,#01H ;清屏
LCALL WR1602
MOV P0,#0CH ;显示开关设置
LCALL WR1602
MOV P0,#38H ;屏幕大小设置
LCALL WR1602
RET
WR1602: CLR RS ;写使能程序
CLR RW
CLR E
LCALL DELAY
SETB E
RET
DELAY: MOV R4,#05
D1: MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,D1
RET

;****************************** 进入显示 进入显示 进入显示**********************************************

DISPLAY: MOV P0,#0C0H ;DDRAM第二行首地址0C0h
LCALL WR1602 ;写入使能1602第一行的初始地址80到8F总共16个
MOV A,HOUR ;读小时 第二行从C0到CF 一共十六个
SWAP A ;高低位交换
ANL A,#0FH ;保留高4位
LCALL RWYX ; 跳入显示使能
MOV P0,#0C1H ;第二行第二个地址
LCALL WR1602
MOV A,HOUR
ANL A,#0FH ;保留低四位
LCALL RWYX
MOV P0,#0C2H ;第三个地址
LCALL WR1602
MOV P0,#3AH ;显示冒号,这是lcd1602 CGRAM冒号的地址
LCALL MAOHAO
MOV P0,#0C3H ;
MOV A,MIN
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#0C4H ;
LCALL WR1602
MOV A,MIN
ANL A,#0FH
LCALL RWYX
MOV P0,#0C5H ;
LCALL WR1602
MOV P0,#3AH ;写冒号
LCALL MAOHAO
MOV P0,#0C6H ;
MOV A,SEC
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#0C7H ;
LCALL WR1602
MOV A,SEC
ANL A,#0FH
LCALL RWYX
MOV P0,#80H ;第一行首地址
LCALL WR1602
MOV P0,#32H ;显示2
LCALL MAOHAO
MOV P0,#81H ;第二个地址
LCALL WR1602
MOV P0,#30H ;显示0
LCALL MAOHAO
MOV P0,#82H
LCALL WR1602
MOV A,YEAR
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#83H
LCALL WR1602
MOV A ,YEAR
ANL A,#0FH
LCALL RWYX
MOV P0,#84H ;冒号
LCALL WR1602
MOV P0,#2FH
LCALL MAOHAO
MOV P0,#85H
LCALL WR1602
MOV A,MON
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#86H
LCALL WR1602
MOV A,MON
ANL A,#0FH
LCALL RWYX
MOV P0,#87H
LCALL WR1602
MOV P0,#2FH
LCALL MAOHAO

MOV P0,#88H
LCALL WR1602
MOV A,DAY
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#89H
LCALL WR1602
MOV A,DAY
ANL A,#0FH
LCALL RWYX
MOV P0,#8AH
LCALL WR1602
MOV P0,#20H
LCALL MAOHAO
MOV P0 ,#8BH
LCALL WR1602
MOV P0 ,#20H
LCALL MAOHAO

MOV P0,#8CH ;
MOV A,WENDU
SWAP A
ANL A,#0FH
LCALL RWYX
MOV P0,#8DH ;
LCALL WR1602
MOV A,WENDU
ANL A,#0FH
LCALL RWYX

MOV P0,#08EH
LCALL WR1602
MOV P0,#0DFH
LCALL MAOHAO
MOV P0,#08FH
LCALL WR1602
MOV P0,#43H ;温度C
LCALL MAOHAO

MOV P0,#0CDH
LCALL WR1602
MOV A,TEMP4
LCALL RWYX
MOV P0,#0CCH
LCALL WR1602
MOV P0,#0A4H
LCALL MAOHAO
MOV P0,#0CBH
LCALL WR1602
MOV A,TEMP3
LCALL RWYX
MOV P0,#0CAH
LCALL WR1602
MOV A,TEMP2
LCALL RWYX
MOV P0,#0C9H
LCALL WR1602
MOV A,TEMP1
LCALL RWYX
MOV P0,#0CEH
LCALL WR1602
MOV P0,#0DFH
LCALL MAOHAO
MOV P0,#0CFH
LCALL WR1602
MOV P0,#43H
LCALL MAOHAO
RET

RWYX: MOV DPTR,#TAB
MOVC A, @A+DPTR
MOV P0 ,A
MAOHAO: SETB RS
CLR RW
CLR E
LCALL DELAY
SETB E
RET
;***************************************进入1302 进入1302 进入1302 *************

SETDS1302:
CLR T_RST ;初始化
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,#8EH ;送控制命令
LCALL INPUTBYTE
MOV B,#00H ;在第0页开始写
LCALL INPUTBYTE
SETB T_CLK
nop
CLR T_RST
MOV R0,#SEC ;送入秒
MOV R1,#80H ;开始写秒
MOV R7,#7 ;写七次 年到秒总共七个数字

SETLOOP:
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,R1
LCALL INPUTBYTE
MOV A,@R0
MOV B,A
LCALL INPUTBYTE
INC R0
INC R1
INC R1
SETB T_CLK
nop
CLR T_RST
nop
DJNZ R7,SETLOOP

CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,#8EH
LCALL INPUTBYTE ;写单字节程序入口
MOV B,#80H
LCALL INPUTBYTE
SETB T_CLK
nop
CLR T_RST
nop
RET

GET1302:
MOV R0,#SEC ;读1302
MOV R1,#81H
MOV R7,#7
GETLOOP:
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,R1
LCALL INPUTBYTE
LCALL OUTPUTBYTE
MOV @R0,A
INC R0
INC R1
INC R1
SETB T_CLK
nop
CLR T_RST
nop
DJNZ R7,GETLOOP
RET

INPUTBYTE:
MOV R4,#8
INPUTLOOP:

MOV A,B
RRC A
MOV B,A
MOV T_IO,C
SETB T_CLK
NOP
CLR T_CLK
DJNZ R4,INPUTLOOP
RET

OUTPUTBYTE: ;读单字节入口
clr a
clr c
MOV R4,#8
OUTPUTLOOP:

NOP
MOV C,T_IO
RRC A
SETB T_CLK
NOP
CLR T_CLK
DJNZ R4,OUTPUTLOOP
RET

;**************************进入13B20 **************************进入13B20 ********************

;------ 读DS18B20传感器的温度值 ------
GET_TEMPER:
SETB P1.0
LCALL RST18B20 ;复位DS18B20
JB 00H,DSS2
RET
DSS2: MOV A,#0CCH ;跳过ROM匹配
LCALL WR18B20
MOV A,#44H ;向DS18B20发出温度转换命令
LCALL WR18B20
LCALL DELAY_1S
LCALL RST18B20 ;准备读温度前先复位DS18B20
MOV A,#0CCH ;跳过ROM匹配
LCALL WR18B20
MOV A,#0BEH ;向DS18B20发出读温度命令
LCALL WR18B20
LCALL RE18B20 ;读出温度数据
RET
;------ DS18B20复位初始化程序 ------
RST18B20:
SETB P1.0
NOP
CLR P1.0
MOV R0,#06BH ;主机发出复位低脉冲
MOV R1,#03H
DSR1: DJNZ R0,DSR1
MOV R0,#6BH ;660us复位低点平
DJNZ R1,DSR1
SETB P1.0 ;拉高数据线
NOP
NOP
NOP
MOV R0,#25H
DSR2: JNB P1.0,DSR3 ;等待DS18B20回应
DJNZ R0,DSR2
LJMP DSR4
DSR3: SETB 00H ;置标志位,表示DS1820存在
LJMP DSR5
DSR4: CLR 00H ;清标志位,表示DS1820不存在
LJMP DSR7
DSR5: MOV R0,#06BH
DSR6: DJNZ R0,DSR6 ;延时一段时间
DSR7: SETB P1.0
RET

;------ 写DS18B20的子程序 ------
WR18B20:
MOV R2,#8 ;写一个字节8bit命令
CLR C
SETB P1.0
NOP
WR1: CLR P1.0
MOV R3,#6
DJNZ R3,$ ;12us左右延时
RRC A
MOV P1.0,C
MOV R3,#23
DJNZ R3,$ ;50us延时,确保DS18B20电平采样正确
SETB P1.0
NOP
DJNZ R2,WR1
SETB P1.0
RET

;------ 从DS18B20中读温度数据程序 ------
RE18B20:
MOV R4,#2
MOV R1,#2FH
RE00: MOV R2,#8
RE01: CLR C
SETB P1.0
NOP
NOP
CLR P1.0
NOP
NOP
NOP
SETB P1.0
MOV R3,#09
RE10: DJNZ R3,RE10 ;延时12us
MOV C,P1.0
MOV R3,#23
RE20: DJNZ R3,RE20 ;延时50us
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
B2T_CH: MOV 38H,#1
JNB 77H,POS ;温度高于零度,则转移
MOV A,2FH
CPL A
INC A
MOV 2FH,A
MOV A,2EH
CPL A
MOV 2EH,A
MOV 38H,#0
POS: MOV A,2FH
ANL A,#0FH ;小数点后保留四位
MOV R1,#04
MOV R0,#3CH
DIG: MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV @R0,A
MOV A,B
INC R0
DJNZ R1,DIG
;整数位操作
MOV A,2FH
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 2DH,A
MOV A,2EH
ANL A,#0FH
RL A
RL A
RL A
RL A
ORL A,2DH
MOV 2DH,A ;整数位存在2DH地址中
MOV CEWEN,2DH
MOV A,CEWEN
SWAP A ;高低位交换
ANL A,#0FH ;保留高4位
MOV TEMP2,A

MOV A,CEWEN
ANL A,#0FH ;保留低四位
MOV TEMP3,A

MOV A,2DH
MOV B,#10
DIV AB
MOV 3BH,B
MOV B,#10
DIV AB
MOV 3AH,B
MOV 39H,A
RET

;*************************************************延时*******************************************************8
DELAY5: MOV R1,#10
DL6: MOV R2,#249
DL7: DJNZ R2,DL7
DJNZ R1,DL6
RET
DELAY1:
MOV R6,#14H
DL8: MOV R7,#19H
DL9: DJNZ R7,DL9
DJNZ R6,DL8
RET

TAB1: DB "WEEK",00H
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,20H ;这里前十位的是0-9的代码,是lcd1602中CDRAM中的地址。20h是空不显示还有一个负号忘记写了。20h和忘了的负号是用于ds18b20的负好显示 ;
END
第4个回答  2011-05-19
是很简单,只是你态度很不好,还是自己翻书去吧~
第5个回答  2011-05-10
不好意思,我只懂C语言。

有关单片机的几个问题!跪求高手回答
1.是个循环,而且是个死循环。他在单片机中是常要用到的,功能就是只要单片机上电它使程序不停里执行死循环里的内容!2.这个看你的单片机的硬件电路了,你最好也先看懂硬件电路才编程。通常LED的公共端是用三极管选通的!看来你的LED是共阳极接法的,就是8个LED正极共同接到三极管的发射极,集电极接...

两程序题 单片机刚入门 跪求高手指教。
1.未知数X存在30H单元,试编写程序计算Y=3X+7,并将结果存入通用寄存器R1 MOV A, 30H MOV B, #03H MUL AB ADD A, #07H MOV R1, A END 2.片内RAN的30H,31H和32H单元分别存了三个无符号数。试编写程序将这三个数相加,并将相加的结果的低字节存入75H单元,高字节存入76H MOV...

关于AVR单片机熔丝位锁死的问题。跪求高手帮忙。
锁死是芯片熔丝配错的结果。熔丝控制很多信息,比如晶振选择,isp使能,jtag使能。如果晶振不对的话,可能单片机无法工作,旧不能仿真和通过isp下载 如果isp禁用后,就不能isp下载了。所以在不熟悉的情况下,千万不要改熔丝。锁死候可以用并行高压编程器解锁 ...

51单片机,max232发热程序不工作!求救!!
这个问题你应该查看一下硬件。当然,如果说你把单片机的TXD和RXD端口搞反了。导致MAX232负载相当于短路是有可能导致发热。但51单片机的这种可能性应该不会很大。当然,最好检测一下,你把单片机去掉,如果MAX232还是发热就和这边没关系了。MAX232有两种电平,一种是232电平,一种是TTL电平。如果电平搞反了。

msp430有点困惑啊,跪求高手指导,,,求救求救
书籍我推荐一本,《MSP430系列单片机接口技术及系统设计实例》,一般常用的型号这个上面都有介绍,电子版的我也有。430单片机学习的时间肯定要比51的时间长,因为内部的功能比较强大,寄存器配置也比较多,但是如果仅仅入门,相信以你可以自学51单片机的能力,也可以很多的,有问题可以随时交流,祝你好运!一个...

单片机 新手汇编出错了missing ";" before "void" 跪求高手解答...
都是语法错误,要打好基本功啊!1. 应该是圆括号 void main(void) while(1) for(i=100;i>0;i--)2.unsigned int 1 常数不能声明 3.LED_BIT-1;是不是LED_BIT=1;

跪求,单片机程序注释
AJMP READ 跳转到READ段 END 程序结束 这个程序是一个读取UART接收的程序,接收到的数据能过P1端口输出。这两个程序一个是通过UART发送按键键值,一个是接收UART数据,并通过P1端口输出。建议直接学习C语言,没有这些跳转指令学习起来会十分轻松!

跪求高手解决问题。谢谢。。
因此,如果这个问题没有对您造成严重的影响,Microsoft 建议您等待包含此修补程序的下一个 Windows 2000 Service Pack。 要立即解决此问题,请与“Microsoft 产品支持服务”联系,以获取此修补程序。有关“Microsoft 产品支持服务”电话号码和支持费用信息的完整列表,请访问 Microsoft Web 站点: 注意:特殊情况下,如果 ...

概率问题。。跪求高手啊,,
4个次品=65.2\/【100+90+80.9+72.6+65.2】=65.2\/408.7=15.9 所以在已经通过的前提下,最有可能包含0个次品 三、在已经通过的前提下,包含的次品的个数的期望是:0*24.5%+1*22%+2*19.8%+3*17.8%+4*15.9%=1.786 所以,在已经通过的前提下,包含次品个数的期望是1.786个 ...

我是个电脑白痴,有问题吐血跪求高手答案。有关闪屏和硬盘坏区
我是个电脑白痴,有问题吐血跪求高手答案。有关闪屏和硬盘坏区 1.每打开视频文件时闪屏(影驰gf7900显卡,60赫兹,不装驱程时不闪,且只是avi,mpg,wmv文件打开时闪,mov,rm,rmvb等其它不闪)WHY...2.“硬盘坏区”是什么东东?如何扫描到?如何检... 1.每打开视频文件时闪屏(影驰gf7900显卡,60赫兹,不装驱程时...

相似回答