完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用单片机通过串口发送一串二进制数(例如: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是地址 |
|
相关推荐
9个回答
|
|
|
|
|
|
不管什么制数,最终串口能发出去的只有纯二进制数
|
|
|
|
还真能写成“SBUF=0100101B”
|
|
|
|
|
|
|
|
; - - - - - - - - - -
; 模拟异步串行输出子程序 ; 数据格式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 |
|
|
|
循环次数就是bit位数,改变延时可改变通讯波特率
|
|
|
|
|
|
|
|
能发9位。波特率取决单片运行速度,高速时能达到57600
|
|
|
|
TMOD,SCON
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:40 , Processed in 0.674783 second(s), Total 58, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号