0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

89C51单片机的汇编语言程序

我想用单片机通过串口发送一串二进制数(例如:0100101,不是8位也不是16位的数),我只会C语言,但是c语言好像不能发二进制的,求高手指点。

类似这种:

#include

#define uchar unsigned char

#define uint unsigned int

void init_uart(void);

void delay(uint x);  

unsigned char code SHUJU[]={0x82,0x03,0x0a,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x24,0x03,0x39,0x71};

void main()

{

        init_uart();

        while(1)

        {

         

           {

                    SBUF =SHUJU[a];   

                        while(!TI);                  

                        TI=0;        

           }         

          c=356;

          while(c--);

                  

        }         

           

}

void init_uart()

{

                                

        TMOD=0X20;

        TH1=0xfd;        

        TL1=0xfd;

        TR1=1;

        SCON=0X40;               

        PCON=0X80;                        

        

//        ES=1;                                                //打开接收中断

//        EA=1;                                                //打开总中断

                                                    //打开计数器

}

SBUF =SHUJU[a]; 这里要是能写成SBUF=0100101B就好了,当然我不是为了用二进制表示16进制,我想让串口输出单纯二进制,长串的二进制

其实我是想模拟一下这个波形(这个波形用16进制不能表示,也可能是我不会)

MSB=1是地址

提问者:武器偶尔u1 地点:- 浏览次数:1433 提问时间:10-19 18:03
我有更好的答案
提 交
9条回答
dwbsemail 05-29 12:58
“例如:0100101,不是8位也不是16位的数”
汇编也不行。
zllmc007 05-30 06:34
不管什么制数,最终串口能发出去的只有纯二进制数
Purchase88 06-04 20:13
还真能写成“SBUF=0100101B”
ishddfh 05-29 15:00
编译软件会自动在前边加一个0,把 “0100101B” 编译成”00100101B”“
如果必须发7位,可以编写个模拟串口通讯程序,不要使用硬件串口寄存器
yhxcftp 06-02 09:43
; - - - - - - - - - -
; 模拟异步串行输出子程序
; 数据格式1Bit启始位,7Bit数据位,1Bit停止位
; - - - - - -
POUT1U:                ;发送起始位(0)
                        CLR        P_OUT1                ;输出0
                        CALL        SDELAY
                        CALL        SDELAY
;                        发送数据
                        MOV     R5,#7                ;循环次数
POUT1U1:                RRC     A                        ;逻辑右移(先送低位 Bit0 - C)
                        JC      POUT1U2                ;C=1转POUT1X2
                        CLR        P_OUT1                ;输出0
                        JMP        POUT1U3
POUT1U2:                SETB         P_OUT1                ;输出1
POUT1U3:                CALL        SDELAY                        ;发送间隔脉冲
                        CALL        SDELAY
                        DJNZ    R5,POUT1U1                ;循环次数减1,没完转,继续
;                        发送停止位        (1)
                        SETB        P_OUT1                                        ;输出1
                        CALL        SDELAY
                        CALL        SDELAY
                        RET
LynnQ 06-03 03:03
循环次数就是bit位数,改变延时可改变通讯波特率
潘涛12345 05-31 09:33
楼主既然能问出这样的问题。
那么我想, 不管谁,如何解释, 你都不会理解的。
想要理解, 最起码最基本的概念要懂......
dsufwesd 06-05 23:11
能发9位。波特率取决单片运行速度,高速时能达到57600
K_Ming 05-29 12:54
TMOD,SCON
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航