搜档网
当前位置:搜档网 › 单片机程序分析题练习B2

单片机程序分析题练习B2

单片机程序分析题练习B2
单片机程序分析题练习B2

1.程序如下:

MOV SP,#13H

MOV 33H,#7FH

MOV 44H,#0ABH

PUSH 33H

PUSH 44H

POP 33H

POP 44H

程序执行后,(33H)=0ABh ,(44H)=7Fh

2.下列各条指令其源操作数的寻址方式是什么?各条指令单独执行后,A中的结果是什么?设(60H)=35H,(A)=19H,(R0)=30H,(30H)=0FH。

(1)MOV A,#48H ;寻址方式:

(A)= 48H

(2)ADD A,60H ;寻址方式:

(A)= 4DH

(3)ANL A,R0 ;寻址方式:

(A)= 10H

3.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?

MOV R1,#30H ;(R1)=30H

MOV A,#64H ;(A)= 64H

ADD A,#47H ;(A)=ABH ,(CY)= 0 ,

(AC)= 0

DA A ;(A)=31H ,(CY)=1 ,

(AC)=

MOV R1,A ;(R1)= 30H ,(30H)= 31H

此程序段完成的功能

4.设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)=0

ORL A,#27H

ANL A,28H

XCHD A,R0

CPL A

5.设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。

SETB C

ADDC A, 20H (A)= 82H (CY)= 0 (AC)= 1

RLC A (A)=04H (CY)=1 (P)= 1

MUL AB (A)=08H (B)=00H (OV)=0

6.已知(R0)=20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后( 40H ) =15H MOV R0 , #11H (20H)=11H

MOV A , R2 A=20H

ADD A , 20H A=40H

MOV PSW , #80H

SUBB A , P0 A=10H

XRL A , #45H A=15H

MOV 40H , A (40H)=15H

7. 已知( R0 )=20H, (20H )=36H, (21H) =17H, (36H) =34H, 执行过程如下:

MOV A , R0 A=36H

MOV R0 , A R0=36H

MOV A , R0 A=34H

ADD A , 21H A=4BH

ORL A , #21H A=21H

RL A A=42H

MOV R2 , A R2=42H

RET

则执行结束(R0)=36H (R2)= 42H

8.设在31H单元存有#23H,执行下面程序:

MOV A, 31H A=23H

ANL A, #0FH A=03H

MOV 41H, A (41H)=03H

MOV A, 31H A=23H

ANL A, #0F0H A=20H

SW AP A A=02H

MOV 42H, A (42H)=02H

则(41H)= 03H (42H)= 02H

9.(R0)=4BH,(A)=84H,片RAM(4BH)=7FH,(40)=20H

MOV A,R0 A=7FH

MOV R0,40H (4BH)=20H

MOV 40H,A (40H)=7FH;

MOV R0,#35H R0=35H

问执行程序后,R0=35H A= 7FH 4BH= 20H 40H= 7FH

10.若PSW=00, 执行下列程序后,PSW的CY,AC,OV,P各位状态如何? MOV A,#0FBH A=FBH

MOV PSW,#10H

ADD A,#7FH A=7AH CY=1; AC=1;OV=1; P=1;

MOVA,20HA=O1H

INCAA=02H

MOVDPTR,#2000HDPRT=2000H

MOVCA,@A+DPTRA=5BH

CPLAA=A3H

MOV 30H,A (30H) =A3H

SJMP $

END

执行程序后,(30H)= A3H

12.分析程序段:

CLRC清零cy指令

MOVA,#91H给A立即数

SUBBA,61H;A寄存器与地址(61h)的值相减

ADDA,61H;A寄存器与地址(61h)的值相加

DAA;BDC码调整指令

MOV62H,A把累加器A的值送给地址寄存器62h

(1)程序执行何种操作?对91H做BDC码调整;

(2)若已知初值:(60H)=24H,(61H)=72H,则运行后,(62H)= 91H 。

13.设(R0)=7EH,DPTR=10FEH,片RAM7EH和7FH两单元的容分别是FFH和38H,请写出下列程序段的每条指令的执行结果。

INCR0(7E)=00H

INCR0R0=7FH

INCR0(7FH)=39H

INCDPTRDPTR=10FFH

INCDPTRDPTR=1100H

INCDPTRDPTR=1101H

14.设R0=20H,R1=25H,(20H)=80H,(21H)=90H,(22H)=A0H,(25H)=A0H,

(26H)=6 FH,(27H)=76H,下列程序执行程序后,结果如何?

CLR C C=0;

MOV R2,#3 R2=3;

LOOP: MOV A,R0 A=80H A=90H

ADDC A,R1 A=20H

MOV R0,A (20H)=20H;(21H)=00H; (22H)=16H

INC R0 R0=21H;

INC R1 R1=26H

DJNZ R2,LOOP

JNC NEXT1

MOV R0,#01H (23H)=01H

SJMP $

NEXT: DEC R0

SJMP $

(20H)=20H 、(21H)= 00H 、(22H)=16H 、(23H)= 01H 、CY=1

A=16H 、R0=23H 、R1=27H 。

15.MOV DPTR,#2000H (DPTR)= 2000H

MOV A,#80H (A)= 80H

MOVX DPTR,A (2000H)= 80H

INC DPTR (DPTR)= 2001

MOV A,#90H (A)= 90H

MOVX DPTR,A (2001H)= 90H

MOV DPTR,#2000H (DPTR)= 2000H

MOVX A,DPTR (A)= 80H

MOV B,A (B)=80H

INC DPTR (DPTR)= 2001H

MOVX A,DPTR (A)= 90H

16.若(10H)=0FFH,(11H)=00H,(12H)=0FFH,(13H)=00H,写出每一步指令运行结果MOV A,10H (A)= FFH ,

ANL A,#01H (A)= 01H ,

MOV A,11H (A)= 00H ,

ORL A,#01H (A)= 01H ,

MOV A,12H (A)= FFH ,

XRL A,#01H (A)= FEH ,

MOV A,13H (A)= 00H ,

XRL A,#0AA (A)= AAH ,

(10H)= FFH , (11H)= 00H , (12H)= FFH , (13H)= 00H

17. 阅读程序并回答下列问题:

X DATA 50H

Y DATA 51H

ORG 00H

JMP START

ORG 100H

START: MOV SP,#60H

MOV X,#10 (50H)=10

MOV Y,#10 (51H)=10

LCALL SUB

SUB: NOP

INC X (50H)=11 X+10=20

DEC Y (51H)=9 Y=0;

MOV A,Y A=9

JZ SUBRET

LCALL SUB

SUBRET: NOP

RET

计算X和Y的值是多少?

(X)=20 ;(Y)=0 ;

18. 设自变量为X,存放在ARE单元,应变量Y存放在BUF单元。给程序标注注释,说明该段子程序的功能并写出该程序的函数关系式。(7分)

START:MOV DPTR,#ARE

MOVX A,DPTR

JZ SUL

ACC.7,NEG ;注释:如果A的值大于128跳转NEG

MOV A,#02H

SUL:MOV DPTR,#BUF

MOVX DPTR,A ;注释:把A的值传送给BUF地址中

RET

NEG:MOV A,#0FEH

SJMP SUL

如果X=0,Y=0;

如果X<128,Y=02h;

如果X>128,Y=FEH;

19. 执行下列程序段后,(P1)=_9AH__。

MOV P1,#5DH

CPL P1.1

CPL P1.2

CLR P1.6

SETB P1.7

20. 执行下列程序段后,(A)=___8BH____,(C Y)=__0_。

MOV A,#C5H

RL A

21. 下列程序段执行后,(R0)=___7EH____,(7EH)=__41H__,(7FH)=___01H____。

MOV R0,#7EH R0=7EH

MOV 7EH,#0FFH (7EH)=FFH

MOV 7FH,#40H (7EH)=40H

1NC R0 (7EH)=41H

1NC R0 R0=7FH;

1NC R0 (7FH)=1;

22. 已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALL

SUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)= ____。

23. 阅读下列程序,说明其功能。

MOV R0,#data

MOV A,R0

RL A

MOV R1,A

RL A

RL A

ADD A,R1

MOV R0,A

RET

24. 程序填空

1)数据块传送,将RAM从30H开始的连续32个单元的容传递给片RAM从60H开始的连续32个单元。

ORG 1000H

MOV R7,_____

MOV R0, #30H

MOV R1,#60H

LOOP:MOV A,R0

MOV _____,A

INC R0

INC R1

DJNZ R7, _____

SJMP $

END

2)RAM中40H单元存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD码的十位和个位放在累加器A中,百位放在R2中。

ORG 2200H

MOV A,_____

MOV B,#64H

DIV AB

MOV R2,A

MOV A,_____

XCH A,B

DIV AB

SWAP _____

ORL A,B

SJMP $

END

3)编程序将片40H-46H单元容的高4位清零,保持低4位不变。

ORG 1000H

MOV R7,#07H

MOV R0,_____

单片机程序分析题练习B2复习过程

1.程序如下: MOV SP,#13H MOV 33H,#7FH MOV 44H,#0ABH PUSH 33H PUSH 44H POP 33H POP 44H 程序执行后,(33H)=0ABh ,(44H)=7Fh 2.下列各条指令其源操作数的寻址方式是什么?各条指令单独执行后,A中的结果是什么?设(60H)=35H,(A)=19H,(R0)=30H,(30H)=0FH。 (1)MOV A,#48H ;寻址方式: (A)= 48H (2)ADD A,60H ;寻址方式: (A)= 4DH (3)ANL A,@R0 ;寻址方式: (A)= 10H 3.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能? MOV R1,#30H ;(R1)=30H MOV A,#64H ;(A)= 64H ADD A,#47H ;(A)=ABH ,(CY)= 0 , (AC)= 0 DA A ;(A)=31H ,(CY)=1 , (AC)= MOV @R1,A ;(R1)= 30H ,(30H)= 31H 此程序段完成的功能 4.设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)=0 ORL A,#27H ANL A,28H XCHD A,@R0 CPL A 5.设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。 SETB C ADDC A, 20H (A)= 82H (CY)= 0 (AC)= 1 RLC A (A)=04H (CY)=1 (P)= 1 MUL AB (A)=08H (B)=00H (OV)=0 6.已知(R0)=20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后( 40H ) =15H MOV @R0 , #11H (20H)=11H MOV A , R2 A=20H

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

一个单片机小程序编写

一个单片机小程序编写 单片机在家用电器和工业系统中应用广泛,下面给大家介绍一个单片机小程序的编写。 1、设计任务: 如果开关合上,L1亮,开关打开,L1熄灭,如图1所示。监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态。 2、电路原理图: 图1 3、系统板上硬件连线:如图1所示,图中VCC = +5V。 4、程序设计内容: (1)开关状态的检测过程: 开关状态是从单片机的P3.0端口输入信号,当拨开开关K1拨上去(开关断开),即输入高电平;当拨动开关K1拨下去(开关闭合),即输入低电平。可以采用JB BIT,REL 指令来完成对开关状态的检测即可。 (2)输出控制: 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮。我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5、程序框图:如图2所示。

图2 6、汇编源程序的编写: ORG 00H START: JB P3.0,D1 CLR P1.0 SJMP START D1: SETB P1.0 SJMP START END 7、用“keil软件编”写好汇编程序,然后转换成HEX文件并保存。 8、用“增强型A51编程器”把刚才写好的HEX文件烧写入单片机中。 9、把已写入程序的单片机,装入图1的电路,然后通电。当拨动开关K1拨下去(开关闭合),发光二极管L1亮;拨开开关K1拨上去(开关断开),发光二极管L1灭。说明刚才编写的程序达到了我们的设计要求。

单片机程序分析题练习B2

1.程序如下: MOV SP , #13H MOV 33H ,#7FH MOV 44H ,#0ABH PUSH 33H PUSH 44H POP 33H POP 44H 程序执行后, (33H)=0ABh 2.下列各条指令其源操作数的寻址方式是什么各条指令单独执行后, (60H )=35H ,(A ) =19H ,(R0)=30H ,(30H )=0FH 。 ( 1 ) MOV A , #48H ;寻址方式 A) = 48H ( 2) ADD A , 60H ;寻址方式 A) = 4DH ( 3) ANL A , @R0 ;寻址方式 A) = 10H 3.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能 MOV R1, #30H ;( R1) =30H MOV A , #64H ; ( A) = 64H ADD A , #47H ;( A) =ABH ,( CY) = 0 , ( AC) = 0 DA A ;( A) =31H ,( CY) =1 ( AC) = MOV @R1, A ; ( R1) = 30H , ( 30H) = 31H 此程序段完成的功能 4. 设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A) =0 ORL A , #27H ANL A , 28H XCHD A , @R0 CPL A 5. 设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。 SETB C ADDC A, 20H (A)= 82H (CY)= 0 (AC)= 1 RLC A (A)=04H (CY)=1 (P) 1 MUL AB (A)=08H (B)=00H (OV)=0 6. 已知( R0) =20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后 ( 40H ) =15H MOV @R0 , #11H (20H)=11H MOV A , R2 A=20H ,(44H )=7Fh A 中的结果是什么设

单片机考试小程序

编程题 1,清零程序 将片外数据存储器中5000h~500ffh单元全部清零 ORG OOOOH MOV DPTR, #5000H MOV R0,#00H CLR A LOOP: MOVX @DPTR,A INC DPTR DJNZ RO,LOOP HERE: SJMP HERH 2.试着编写程序,查找在内部 RAM的20h~40h单元中出现00h这一数据的次数将查到的结果存入41h单元 ORG 0000H MOV R0,#20H MOV R1,#21H MOV 41H,#00H LOOP: CJNE @RO,#00H,NEXT INC 41H NEXT: INC R0 DJNZ RI,LOOP HERE: SJMP HERE 3查找在内部RAM的30h~50单元中是否有0AAH这一数据,若有则将51H单元置为01H;若未找到;则将51H单元置为00H. ORG 0000H MOV R0,#30H MOV R1,#21H LOOP: CJNE @R0,0AAH,NEXT MOV 51H,#01H SJMP HERE NEXT: INC R0 DJNZ R1,LOOP MOV 51H,#00H HERE: SJMP HERE 4编写程序功能为把1000H开始的外部RAM单元中的数据送到内部RAM50H开始的单元中,数据的个数存放在了内部RAM60H单元。 ORG 0000H MOV DPTR #1000H MOV R0,#50H MOV R1,60H LOOP: MOVX A,@DPTR MOV 50H,A INC DPTR INC R0

DJNZ RI,LOOP HERE: SJMP HERE 5.编写请将ROM3000H单元内容送R7. ORG 0000H MOV DPTR, #3000H CLR A MOVC A ,@A+DPTR MOV R7,A END 6.片外RAM2000H单元内容送到片外RAM1000H的单元中。 ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,,#1000H\ MOVX @DPTR,A 7.锯齿形波: ORG 2000H START: MOV R0,#0FEH MOV A,#00H LOOP: MOVX @R0,A INC A SJMP LOOP 8三角形波 ORG 2000H START MOV R0,#0FEH MOV A,#00H UP: MOVX @R0,A INC A JNZ UP DOWN: DEC A MOVX @DPTR,A JNZ DOWN SJMP UP

51单片机实验程序

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

单片机程序分析试题与答案

六、设计题 1.某单片机控制系统有8个发光二极管。试画出89C51与外设的连接图并编程使它们由右向左轮流点亮。 答:图(5分) 构思(3分) MOV A,#80H (1分) UP:MOV P1,A (1分) RR A (2分) SJMP UP (1分) 2.某控制系统有2个开关K1和K2,1个数码管,当K1按下时数码管加1,K2按下时数码管减1。试画出8051与外设的连接图并编程实现上述要求。 答:图(5分) 构思(3分) 程序(4分) ORG 0000H LJMP MAIN ORG 0003H LJMP AINT0 ORG 0013H LJMP BINT1 MAIN: MOV IE,#83H SETB IT0 SETB IT1 MOV R0,#00H MOV DPTR,#TAB UP: MOV A,R0 MOVC A,@A+DPTR MOV P1,A SJMP UP AINT0: INC R0 CJNE R0,#10,AINT01 MOV R0,#0 AINT01: RETI BINT1: DEC R0 CJNE R0,#0FFH,BINT11 MOV R0,#9 BINT11: RETI 1.已知在累加器A中存放一个BCD数(0~9),请编程实现一个查平方表的子程序。 1.SQR:1NC A MOVC A,@A+PC RET TAB:DB 0,1,4,9,16 DB 25,36,49,64,81 2.请使用位操作指令实现下列逻辑操作:BIT=(10H∨P1.0)∧(11H∨C Y) 2.ORL C,11H

MOV 12H,C MOV C,P1.0 ORL C,/10H ANL C,12H MOV BIT,C RET 3.已知变量X存于V AR单元,函数值Y存于FUNC单元,按下式编程求Y值。 Y= 10 0 1 x x x > - = 0,Y=1 MOV A,#0FFH ;x<0,Y=-1 SJMP RES POSI:MOV A,#01H RES:MOV FUNC,A RET 4.已知在R2中存放一个压缩的BCD码,请将它拆成二个BCD字节,结果存于SUM开始的 单元中(低位在前)。 4. MOV R0,#SUM MOV A,R2 ANL A,#OFH MOV @R0,A ;存低字节BCD MOV A,R2 ANL A,#0F0H SW AP A 1NC R0 MOV @R0,A ;存高字节BCD RET 5.将存于外部RAM 8000H开始的50H数据传送0010H的区域,请编程实现。 5. MOV DPTR,#8000H MOV R0,#10H MOV R2,#50H LOOP:MOVX A,@DPTR ;取数 MOVX @R0,A ;存数 1NC DPTR 1NC R0 DJNZ R2,LOOP RE T

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

单片机实验答案

前言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。目前在国内单片机应用中,MCS-51系列单片机仍然是一种主流单片机。为配合《单片机应用技术》课程的教学,使学生尽快了解、掌握89C51单片机的使用,特编写了这本上机指导书(基础篇)。 《单片机》是一门实践性很强的课程,提高教学质量的一个重要环节是上机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供了9个实验的指导性材料,实验还有一些思考题,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。 由于时间紧迫,加上编者学识有限,如有不妥之处,欢迎读者批评指正。 编者

实验须知 1. 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成实验前要求完成的准备工作后方可以上机实验,否则不得上机操作。 2. 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。 3. 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。 4. 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。 5. 实验中若损坏仪器或元器件,应及时向指导教师报告,听候处理。 6. 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。 7. 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。 8. 按规定认真完成实验报告,对实验中出现的现象进行分析,在规定的时间内交上实验报告。 9. 凡实验或实验报告未能按规定完成的学生,不能参加本课程的考试或考查。

5 STC15F2K60S2单片机的程序设计 例题

第5章STC15F2K60S2单片机的程序设计 例题 例5.1 分析ORG在下面程序段中的控制作用 ORG 1000H START: MOV R0,#60H MOV R1,#61H …… ORG 1200H NEXT: MOV DPTR,#1000H MOV R2,#70H …… 解:以START开始的程序汇编后机器码从1000H单元开始连续存放,不能超过1200H 单元;以NEXT开始程序汇编后机器码从1200H单元开始连续存放。 例5.2 分析END在下面程序段中的控制作用。 START: MOV A,#30H …… END START NEXT: …… RET 解:汇编程序对该程序进行汇编时,只将END伪指令前面的程序转换为对应的机器代码程序,而以NEXT标号为起始地址的程序将予以忽略。因此,若NEXT标号为起始地址的子程序是本程序的有效子程序的话,应将整个子程序段放到END伪指令的前面。

例5.3 分析下列程序中EQU指令的作用 AA EQU R1 ;给AA赋值R1 DA TA1 EQU 10H ;给DA TA1赋值10H DELAY EQU 2200H ;给DELAY赋值2200H ORG 2000H MOV R0,DATA1 ;R0←(10H) MOV A,AA ;A←(R1) LCALL DELAY ;调用起始地址为2200H的子程序 END 解:经EQU定义后,AA等效于R1,DATA1等效于10H,DELAY等效于2200H,该程序在汇编时,自动将程序中AA换成R1、DATA1换成10H、DELAY换成2200H,再汇编为机器代码程序。 使用赋值伪指令EQU的好处在于程序占用的资源数据符号或寄存器符号用占用源的英文或英文缩写字符名称来定义,后续编程中凡是出现该数据符号或寄存器符号就用该字符名称代替,这样,采用有意义的字符名称进行编程,更容易记忆和不容易混淆,也便于阅读。

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.sodocs.net/doc/cb18766907.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.sodocs.net/doc/cb18766907.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.sodocs.net/doc/cb18766907.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

单片机实验指导书——带答案

《单片机原理及应用》 实验指导书 姓名: 学号: 专业班级: 所在学院:成人教育学院 2012年5月日 单片机实验指导书

目录 实验一系统认识实验 (2) 实验二程序调试 (4) 实验三外部中断实验 (6) 实验四串口实验 (8) 实验一系统认识实验 一、实验目的 1.掌握SICElab-G2200实验/仿真系统的结构与使用方法; 2.熟悉单片机系统开发软件WAVE6000。

二、实验设备 1.G2200/2100 实验平台 1 台 2.仿真器/ 仿真板 1 台 3.连线若干根 4.计算机 1 台 三、实验内容 P1端口接发光二极管,加1点亮。 四、连线方案: 实验箱 内部已 连好 五、实验步骤 1.连接Lab51CPU板。(已由实验师连好) 2.仿真器与实验平台的连接 将Lab51板的DC34芯插座与G6W仿真器上的DC34插座用扁平电缆连接起来。(已由实验师连好) 3.仿真器与计算机的连接 用随机配带的串口通讯电缆,将仿真器与计算机连接起来,串口1、串口2均可。 特别注意:在仿真器与计算机连接串口电缆时,两台机器必须都断电,否则易损坏计算机和仿真器。 4.实验连线 按连线方案,用随机配带的实验连线插入孔后,轻轻转动一下锁紧插头,保证良好接触。拆线时,应先回转一下,不要硬拨,以免损坏线路板。不管是拆线还是插线,都应在断电的情况下进行。实验中“连线方案”的粗线即为需用户动手接连的线。 5.检查接线是否有误,确信没有接错后,接上电源,打开电源开关。 6.在计算机上打开“WAVE6000集成调试环境”,界面如下图所示: 7.建立新程序(如果程序已编好,直接跳到第9步) 选择菜单[文件 | 新建文件]功能。 出现一个文件名为NONAME1的源程序窗口,在此窗口中输入以下程序 ORG 0 MOV P1,#0 ;熄灭发光二极管 LOOP: INC P1 CALL Delay SJMP LOOP Delay: MOV R2,#3 ;延时程序 MOV R1,#0

单片机C语言小程序

单片机C语言小程序 #include #include #define V AR XBYTE[0x00] /*V AR为外部位址0000*/ #define read 0 /*93c46读取的识别码READ=0*/ #define write 2 /*93c46写入的识别码WRITE=2*/ #define ewen 4 /*93C46写致能的识别码EWEN=4*/ #define ewds 6 /*93C46写除能的识别码EWDS=6*/ #define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/ #define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/ #define di T0 /*93C46 DI接脚=8051 T1 P3.4*/ #define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/ #define LOW 0x49 /*存放测试温度的下限值*/ #define HIGH 0x51 /*存放测试温度的上限值*/ bit FLAG0=0; /*宣告TIMER0响应旗号*/ //外接工业专用温度传感器时,目前设置测量温度为0-99度: static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/ 0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/ 0xEA,0xEE}; /*100度,110度*/ //使用板上AD590温度传感器时,目前设置测量温度为0-99度: //static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/ // 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/ // 0xba,0xc0}; /*100度,110度*/ char data1[2]; char C,S,k=0; char MEP[7]; /*显示器值存放阵列*/ //MEP[0]=数码管最低位显示值,温度指示小数点后位 //MEP[1]=数码管次低位显示值,温度指示个位数 //MEP[2]=数码管高位显示值,温度指示十位数 //MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5 //MEP[4]= //MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中 unsigned char combuf[10]; unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1; char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0; void delay (unsigned int value) /*延时副程式*/ { while (value!=0) value--; /*10us延时*/ } void COMP(); /*宣告比较现在温度与设定温度副程式*/ void SET();

单片机实验二

单片机实验报告(二) 姓名:赵苑珺 学号:090250129

实验三程序设计(二) 一、实验目的 1、了解汇编语言程序设计与调试的过程; 2、掌握循环程序、查表程序和子程序的特点及设计。 二、实验内容 1、循环程序的设计、输入、调试和运行; 2、查表程序的设计、输入、调试和运行; 3、子程序的设计、输入、调试和运行。 三、实验步骤 1、排序程序:将N 个数从小到大排列起来。 设R0 的内容为数据区的首地址,R7 的内容为数据的字节数。参考程序为:MOV R0,#30H ;将序列首地址存入R0中 MOV R7,#10 ;将序列长度存入R7中 SS: MOV A,R7 MOV R2,A MOV 60H,R0 ;将序列首地址存入60H NN: DEC R2 ;循环程序,控制排序次数 MOV A,R2 MOV R3,A MOV R0,60H L1: MOV A,@R0 ;将序列第一个数存入A中 INC R0 ;R0加1,指向第二个位置 CLR C ;清除进位标志位C,为比较两数大小做准备 SUBB A,@R0 ;第一个数减去第二个数 JC MM ;判断C的状态,1(代表数1小于数2)跳至MM,0(代表数 1大于数2)继续执行 MOV A,@R0 ;将第二个数存入累加器A中 DEC R0 ;R0指向第一个位置 XCH A,@R0 ;将A中的数(数1)与R0指向的数(数2)交换 INC R0 ;R0减一,指向位置一 MOV @R0,A ;将A中的数2存到位置一内 SETB F0 ;置位用户标志位,表示有交换 MM: DJNZ R3,L1 ;R3减一不为零则跳至L1,否则继续执行程序 MOV A,R2 CJNE R2,#01H,L2 ;判断R2中的数是否已经减为1,是跳至JJ,否跳至L2 SJMP JJ L2: JB F0,NN ;判断F0状态,若为1(有交换)则跳至NN,否则继续进行JJ: MOV R0,60H ;将序列首地址存入R0 END

基于51单片机FAT32文件系统程序

基于51单片机FAT32文件系统程序 #ifndef __ZNFAT_H__ #define __ZNFAT_H__ #include "mytype.h" //类型重定义 /*******************************************************/ //znFAT的裁减宏--------------------------------------------------------- //#define ZNFAT_ENTER_DIR //有此宏,函数 znFAT_Enter_Dir() 参与编译 #define ZNFAT_OPEN_FILE //有此宏,函数 znFAT_Open_File() 参与编译 //#define ZNFAT_SEEK_FILE //有此宏,函数 znFAT_Seek_File() 参与编译 //#define ZNFAT_READ_FILE //有此宏,函数 znFAT_Read_File() 参与编译 //#define ZNFAT_READ_FILEX //有此宏,函数 znFAT_Read_FileX() 参与编译 //#define ZNFAT_ADD_DAT //有此宏,函数 znFAT_Add_Dat() 参与编译 //#define ZNFAT_CREATE_DIR //有此宏,函数 znFAT_Create_Dir() 参与编译 //#define ZNFAT_CREATE_FILE //有此宏,函数 znFAT_Create_File() 参与编译 //#define ZNFAT_DEL_FILE //有此宏,函数 znFAT_Del_File() 参与编译 //#define ZNFAT_XCOPY_FILE //有此宏,函数 znFAT_XCopy_File() 参与编译 //#define ZNFAT_RENAME_FILE //有此宏,函数 znFAT_Rename_File() 参与编译 //#define ZNFAT_GET_TOTAL_SIZE //有此宏,函数 znFAT_Get_Total_Size() 参与编译 //#define znFAT_GET_REMAIN_CAP //有此宏,函数 znFAT_Get_Remain_Cap() 参与编译 #include "cj.h" #include "cj.h" //---------------------------------------------------------------------- #define SOC(c) (((c-pArg->FirstDirClust)*(pArg->SectorsPerClust))+pArg->FirstDirSector) // 用于计算簇的开始扇区#define CONST const //设备表 #define SDCARD 0 //SD卡 #define UDISK 1 //U盘 #define CFCARD 2 //CF卡 #define OTHER 3 //其它 //这里的存储设备表,可以灵活扩充,以实现对更多存储设备的支持 //------------------------------------------- #define MAKE_FILE_TIME(h,m,s) ((((unsigned int)h)<<11)+(((unsigned int)m)<<5)+(((unsigned int)s)>>1)) /* 生成指定时分秒的文件时间数据 */ #define MAKE_FILE_DATE(y,m,d) (((((unsigned int)y)+20)<<9)+(((unsigned int)m)<<5)+((unsigned int)d)) /* 生成指定年月日的文件日期数据 */ //DPT:分区记录结构如下 struct PartRecord { UINT8 Active; //0x80表示此分区有效 UINT8 StartHead; //分区的开始磁头 UINT8 StartCylSect[2];//开始柱面与扇区 UINT8 PartType; //分区类型 UINT8 EndHead; //分区的结束头 UINT8 EndCylSect[2]; //结束柱面与扇区 UINT8 StartLBA[4]; //分区的第一个扇区 UINT8 Size[4]; //分区的大小

单片机c程序编写

单片机C语言编程基础 时间:2011-05-01 22:47:26来源:作者: 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 单片机C语言编程基础 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC While( 1 ); //死循环,相当LOOP: goto LOOP; } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。 在某引脚输出低电平的编程方法:(比如P2.7引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND While( 1 ); //死循环,相当LOOP: goto LOOP; } 在某引脚输出方波编程方法:(比如P3.1引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 {

相关主题