51微控制器中unsigned char到底定义的是字元还是0--255的数字

51微控制器中unsigned char到底定义的是字元还是0--255的数字,第1张

51微控制器中unsigned char到底定义的是字元还是0--255的数字

是一个8位的二进位制码 他可以储存字元代表的ascii码也可以表示一个0-255的数字,一般变数的大小不超过255的话尽量用char,因为这样可以节省一些RAM

string定义的是字元还是字串

String定义可以是字元,也可以是字串,比如

String str =“asadsada”;

char[] c1 = str1toCharArray();对应的字串可以转换成char阵列

c++中char a=“c++ language” 定义的是字串a为c++language 还是a为c++language ?

你应该这样看:

char a = "c++ language";

其实就是表示,定义一个字元指标a,并初始化指向一个"c++ language"的字串

由于"c++ language"是字串常量,所以a又预设转化为了字串常量指标。

a的确表示“c++ language”在记忆体中的首地址

C# 51单片机发送1到999的数字

255以上的数字要分两个位元组传送才行,分高8 位和低8 位,

为了便于接收,小于256的资料也采用两个位元组

51微控制器中如何定义比较大的阵列变数 比如 char[1024][10]

定义这种大的阵列,你首先得有这么大的RAM才可以,不然肯定不好用。内部地址空间就别想了,肯定是放在外部。

如果是常数阵列,可以定义到程式码里面,code char [1024][10],这种程式只能读,不能改,像字型档点阵一般用这种。

如果有足够的外部RAM,xdata char xx[1024][10]; 这是把阵列定义到外部RAM,需要用MOVX访问。

89c51微控制器的数字钟程式?

/

ILONG编做

注意P3口输出模拟和在{实验板}上不一样。实验板不用取反

目的:用20次T0定时产生1s进而形成 HH-mm-ss时间

引数说明:

40H~47H :显示管,每位暂存器,存放要显示的数码的地址。可根据地址加1,实现该位数加1;

并且低4位可以代表管子要显示的值(42H、45H除外)。

48H :要显示的位值(0~7,由译码器翻译出)

49H :每位每次刷出时要显示的时间0~256us

4A :20次定时,的次数计数器

4BH,4CH :小时十位进位刷0,时,小时两位数的暂存

4DH :除错时,要调整型别,每次INT0中断自增一次

50H~5FH :0~F 16个数的码值

60H :"-"的码值

61H :"空" 的码值

62H,63H :要闪的两位地址暂存 (好像没用着)

R0 :存放 每位暂存器 的地址,用于 重新整理位时 移位

00H(位) :是否有INT0(调整)中断

01H(位) :是闪亮,还是闪空,即:闪烁时的亮暗状态

存在问题:

1,调整时间时,分钟位开始乱码。

2,调整时间时,必须亮的时候才能调

3,时间差:慢于实际时间

20111021 ilong(crazy night)

/

SJMP 0x0030

ORG 0x0030

MAIN:

启动外部中断

SETB IT0

SETB IE0

SETB EX0

SETB PX0

SETB IT1

SETB IE1

SETB EX1

SETB PX1

SETB EA

CLR 00H 没有调整中断

CLR 01H 闪空

MOV 4DH,#04H 0xFC

MOV P3,#0FH

MOV 62H,46H 从分开始闪

MOV 63H,47H

十位数

MOV 50H,#3FH

MOV 51H,#06H

MOV 52H,#5BH

MOV 53H,#4FH

MOV 54H,#66H

MOV 55H,#6DH

MOV 56H,#7DH

MOV 57H,#07H

MOV 58H,#7FH

MOV 59H,#6FH

MOV 5AH,#77H

MOV 5BH,#7CH

MOV 5CH,#39H

MOV 5DH,#5EH

MOV 5EH,#79H

MOV 5FH,#71H

MOV 60H,#40H

MOV 61H,#00H

八位管的暂存 从左到右40-47

MOV 40H,#50H

MOV 41H,#50H

MOV 42H,#60H

MOV 43H,#50H

MOV 44H,#50H

MOV 45H,#60H

MOV 46H,#50H

MOV 47H,#50H

MOV 48H,#00H 扫描位暂存

MOV R0,#40H 扫描值地址

MOV 4AH,00H 20次定时 计数

LCALL TIMER_GO20 开启并初始定时器

主函式程序,就是扫描码管值并显示,其他为中断 *** 作

SCAN: 显示器扫描输出

MOV P2,48H 选择显示位(从左到右0-7)

MOV A,@R0 获取该位的数码值 地址

MOV R1,A

MOV A,@R1 获取该位码值

CPL A 根据数码管是共阴、共阳 是否取反

MOV P0,A 从P0输出每位的码值,注意:该埠时下面的“清屏”一起改

LCALL DELAY 进入每位延时

MOV P0,#0FFH 清屏

INC 48H 暂存器后移

INC R0 位后移

MOV A,48H 通过 (48H)的值+08H 判断是否到了 位尾

ADD A,#08H

JB 0D6H,RER D6H(位)为AC(辅助进位:半进位)。为1时说明(48H)的值+08H=F,即(48H)=8,此时跳向RER

SJMP SCAN

RER: 扫描重置

CLR 0D6H 重置 AC(辅助进位:半进位)

MOV 48H,#00H

MOV R0,#40H

SJMP SCAN

End 主函式

DELAY: 延时,用于扫描7段管时,在每一位停留的时间时间太短,回使不该亮的段也有些亮

MOV 49H,#25H 49H的值不可以等于FF,因为FF取反后49H为0,不会延迟了

MOV A,0FEH 用取反设定回圈次数,

CPL A

MOV 49H,A

ADD_1:

INC 49H

MOV R1,49H 因为DJNZ判断完后要把判断的地址减去1,所以为了DJNZ不对49H的内容造成影响,把49H的值装到R1中去判断

DJNZ R1,ADD_1

RET

20次定时

TIMER_GO20:

用4AH 设定回圈次数

MOV 4AH,#15H 20(=0x15)次定时

MOV A,4AH 用取反设定定时次数,

CPL A

MOV 4AH,A

SJMP TIMER_S

TIMER_GO5: 与TIMER_GO20类似,只是这里只让定时5次一回圈。用于调整闪烁

MOV 4AH,#05H 5(=0x05)次定时

MOV A,4AH 用取反设定定时次数,

CPL A

MOV 4AH,A

TIMER_S:未重置(4AH)的呼叫,

设定启动T0

MOV TMOD,#01H 设定模式:T0模式1

MOV TH0,#3CH T0初值高8位

MOV TL0,#0AH T0初值低8位

CLR TF0 未知问题

SETB ET0 T0允许中断

SETB EA CPU允许中断

SETB TR0 启动T0

RET

T0_INT: T0中断程式段

CPL P17 测试埠:T0重新定时一次发生一次跳转

LCALL TIMER_S T0重新定时,继续跑。但:不会初始化20次计数

INC 4AH T0定时次数加1

MOV A,4AH

JNZ CY_20 50H加到FF再加就到0了。不为0回去接着执行主程式;为0 则20次定时 溢位即:00H(位)为1

CPL P16 测试埠每秒发生一次跳转

JB 00H,GO_BLINK 如果00H(位)被置1,则不再执行时间系统加1。用于调整时显示闪烁

LCALL CLOCK_GO 时间系统加1秒

LCALL TIMER_GO20 20次重新开始

SJMP CY_20

GO_BLINK:

LCALL TIMER_GO5 5次重新开始,

LCALL BLINK

CY_20: RET

时间系统进位设定

CLOCK_GO:

INC 47H 秒加1

个位秒 进位 十位

MOV A,#5AH 主要是看"#5A"中的“A”,

SUBB A,47H

JNZ SS_OUT 如果(47H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 47H,#50H

INC 46H

SS_OUT:

秒 进位 分

MOV A,#56H

SUBB A,46H

JNZ SM_OUT 如果(46H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 46H,#50H

CLOCK_GO_M:INC 44H

分调整用

SM_OUT:

分个位 进位 分

MOV A,#5AH

SUBB A,44H

JNZ MM_OUT 如果(44H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 44H,#50H

INC 43H

MM_OUT:

分 进位 时

MOV A,#56H

SUBB A,43H

JNZ MH_OUT 如果(43H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 43H,#50H

CLOCK_GO_H:INC 41H

时调整用

MH_OUT:

时个位 进位 时

MOV A,#5AH

CLR CY 排除借位影响

SUBB A,41H

JNZ HH_OUT 如果(41H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 41H,#50H

INC 40H

HH_OUT:

时十位置0

MOV 4BH,40H 为了不影响暂存器资料,把40H、41H转到4BH、4CH中进行 *** 作

MOV 4CH,41H

MOV A,4BH

SWAP A 获得小时十位数,并放到A的高4位上

ANL A,#0F0H 清0低4位

ANL 4CH,#0FH 小时个位 高4位清0

ADD A,4CH 小时的十位与个位相加(高4位来自小时的十位暂存器40H,低四位来自小时个位的暂存器41H)

SUBB A,#24H

JNZ HD_OUT 如果(46H)值 低4 与A中的低4不相同,跳到“SS_OUT”,不进位

MOV 41H,#50H 个位 清零

MOV 40H,#50H 十位清零

HD_OUT:

CG_OUT: RET

END 时间系统进位设定

INTO中断程式段

INT0_INT:

SETB 00H

CPL P15

CPL P15

CLR 01H 使得在换位闪烁时不会把上位的数带给下一位,

HMS_BACK: 在每次换位时都要把,被放到暂存上的值那回去,使其显示出来

MOV A,4DH

CJNE A,#02H,BSH_S back second OR hour _select

LCALL LIGHT_M

SJMP B_END

BSH_S: 恢复秒小时选择

JB CY,B_H

SJMP B_S

B_S: LCALL LIGHT_S 把调好的资料装回暂存器

SJMP B_END

B_H: LCALL LIGHT_H

B_END:

CLR TR0 定时器0,停止计时

DEC 4DH 调整型别(时、分、秒)改变

MOV A,4DH

JNZ INT0_OUT 是否恢复时钟

CLR 00H 置0,调整中断(ilong 定义)

CLR 01H

MOV 4DH,#04H 初始化调整型别

INT0_OUT:

RET

闪烁

BLINK:

CPL P11

CPL 01H

MOV A,4DH

CJNE A,#02H,SH_S

SJMP MM_SET

SH_S: 闪烁秒小时选择

JB CY,HH_SET

SJMP SS_SET

SS_SET: 秒钟设定

JB 01H,DACK_S

LIGHT_S:

MOV 46H,4EH

MOV 47H,4FH

SJMP BLINK_OUT

DACK_S:

MOV 4EH,46H

MOV 4FH,47H

MOV 46H,#61H

MOV 47H,#61H

RET

MM_SET: 分钟设定

JB 01H,DACK_M

LIGHT_M:

MOV 43H,4EH

MOV 44H,4FH

SJMP BLINK_OUT

DACK_M:

MOV 4EH,43H

MOV 4FH,44H

MOV 43H,#61H

MOV 44H,#61H

RET

HH_SET: 小时设定

JB 01H,DACK_H

LIGHT_H:

MOV 40H,4EH

MOV 41H,4FH

SJMP BLINK_OUT

DACK_H:

MOV 4EH,40H

MOV 4FH,41H

MOV 40H,#61H

MOV 41H,#61H

BLINK_OUT:RET

INT1中断程式段

INT1_INT:

lcall HMS_BACK

clr tr0

CPL P14

MOV A,4DH

CJNE A,#02H,ADDSH_S ADD Hour OR ADD second OR _select

SJMP ADD_M

ADDSH_S: 调整秒小时选择

JB CY,ADD_H

SJMP ADD_S

ADD_S: LCALL CLOCK_GO

SJMP ADD_END

ADD_M: LCALL CLOCK_GO_M

SJMP ADD_END

ADD_H: LCALL CLOCK_GO_H

ADD_END:

LCALL CLOCK_GO

RET

/

最后放中断保险些

/

T0中断程式

ORG 000BH

LCALL T0_INT

RETI

INT0中断

ORG 0003H

LCALL INT0_INT

RETI

INT1中断

ORG 0013H

LCALL INT1_INT

RETI

END

定义变数a的资料型别为无符号字元型,在stc51微控制器中将占用多少个字元

资料型别在资料结构中的定义是一个值的集合以及定义在这个值集上的一组 *** 作。

变数是用来储存值的所在处;它们有名字和资料型别。变数的资料型别决定了如何将代表这些值的位储存到计算机的记忆体中。在宣告变数时也可指定它的资料型别。

所有变数都具有资料型别,以决定能够储存哪种资料。

51微控制器中怎样进行位定义

变数位定义使用bit lock

IO口位定义使用 it lock=P1^0;

希望可以帮到你,谢谢!

51微控制器中写函式时 interrutp 后面的数字 如1,2,3,4 都有特定的意义吗?还是这是数字可以随便用

void INT0()interrupt 0 using 1

{

}

interrupt 0 指明是外部中断0;

interrupt 1 指明是定时器中断0;

interrupt 2 指明是外部中断1;

interrupt 3 指明是定时器中断1;

interrupt 4 指明是序列口中断;

using 0 是第0组暂存器;

using 1 是第1组暂存器;

using 2 是第2组暂存器;

using 3 是第3组暂存器;

51微控制器内的暂存器是R0--R7(不是R0-R3)

R0-R7在资料储存器里的实际地址是由特殊功能暂存器PSW里的RS1、RS0位决定的。

using 0时设定 RS1=0,RS0 =0,用第0组暂存器,R0--R7的在资料储存区里的实际地址是00H-07H。R0(00H)R7(07H)

using 1时设定 RS1=0,RS0 =1,用第1组暂存器,R0--R7的在资料储存区里的实际地址是00H-07H。R0(08H)R7(0FH)

using 2时设定 RS1=1,RS0 =0,用第2组暂存器,R0--R7的在资料储存区里的实际地址是08H-0FH。R0(10H)R7(17H)

using 3时设定 RS1=1,RS0 =1,用第3组暂存器,R0--R7的在资料储存区里的实际地址是00H-07H。R0(18H)R7(1FH)

51微控制器组合语言的标号是如何定义的

标号可以自由编写,方便自己认识就可以,但要注意不能用指令或伪指令及相关的保留字,如不能用ORG,MOV,EQU等等字元做为标号,标号内最好不要用加减号或等于号等标点,标号的格式是字元加冒号(:)

如:

ORG 0000H

AJMP START

ORG 0003H

LJMP INT_REV

ORG 0030H

START:

ORG 01FFH

INT_REV:

RETI

ORG 0H 程序起始地址

ACALL ZI 跳转到zi

SJMP $

ZI: MOV R0,#31H 把31H给R0

MOV 30H,#15 把数组个数15给30H单元

LOOP: MOV A,@R0 把地址31H中的数据给A寄存器

JB ACC0,LOOP1 判断寄存器A中的最低位是0 还是1,是1就是奇数,是0就是0偶数。是奇数的话跳到LOOP1,是偶数的话顺序执行。。。这语句判断奇偶数

INC 41H 偶数个数加1

AJMP Jie_Shu

LOOP1: INC 40H 奇数个数加1,,也就是这一句将奇数个数存于40H单元

Jie_Shu: INC R0 地址加1,31H,32H,33H,34H

DJNZ 30H,LOOP 看看是不是到数据元素个数了了,到了就结束了,否则返回去继续执行

RET

END

以下代码不是采用中断方式,并且使用了74HC573,给你参考。

SEG_C   BIT P14    ;/段控制位定义

BIT_C   BIT P15    ;/位控制位定义

DISPLAY_BUFF EQU 30H;显示缓存30H-37H,8字节

COUN_WEI EQU 3CH  ;/显示位存储区

       ORG 0000H

       AJMP MAIN

        ORG 0100H

MAIN:   MOV SP,#60H

       MOV COUN_WEI,#0

;初始化显示缓存

  MOV DISPLAY_BUFF,#4

  MOV DISPLAY_BUFF+1,#2

  MOV DISPLAY_BUFF+2,#6

  MOV DISPLAY_BUFF+3,#7

  MOV DISPLAY_BUFF+4,#2

  MOV DISPLAY_BUFF+5,#1

  MOV DISPLAY_BUFF+6,#8

  MOV DISPLAY_BUFF+7,#5

 

LOOP:   CALL DISPLAY_0

       JMP LOOP

 

;/显示DISPLAY_BUFF(8字节)中的数据

DISPLAY_0:       

   CLR SEG_C    ;/关显示

    CLR BIT_C   ;[]

    MOV P0,#0ffh;[]

    SETB BIT_C

    NOP

    CLR BIT_C

 

     MOV A,COUN_WEI ;//段码给出

     

    ADD A,#DISPLAY_BUFF

    MOV R0,A

    MOV A,@R0

    MOV DPTR,#SEG_TAB

    MOVC A,@A+DPTR

    MOV P0,A

    SETB SEG_C

    NOP

    CLR SEG_C

 

    MOV A,COUN_WEI ;/位码给出

    MOV DPTR,#WEI_TAB

    MOVC A,@A+DPTR

    MOV P0,A

    SETB BIT_C

    nop

    CLR BIT_C

    CALL DELAY_1MS;先clr bti—C再做延时

    

    INC COUN_WEI

    MOV A,COUN_WEI

    CJNE A,#8,DISPLAY_0

    MOV COUN_WEI,#0

    RET

 

DELAY_1MS:         

    MOV R1,#35;50[防止闪烁]

D1:                          

    MOV R2,#100

    DJNZ R2,$

    DJNZ R1,D1

    RET

 

SEG_TAB: DB 03fh,06H,05BH,04FH,66H,06DH,07DH,07H,07FH,06FH;共阴数码管段码[0~9]

WEI_TAB: DB 0FeH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;

        END

以上就是关于51微控制器中unsigned char到底定义的是字元还是0--255的数字全部的内容,包括:51微控制器中unsigned char到底定义的是字元还是0--255的数字、51系列单片机 常用数据处理程序设计 数值统计子程序、用51单片机控制8位数码管显示特定数字,如426721850求程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10207422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存