- #include
- sbit d1=P1^1; //接有发光二极管,低电平时灯亮
- sbit rx=P3^0;
- void delayms(unsigned int x) //延时x毫秒
- {
- unsigned int i,j;
- for(i=0;i
- {
- for(j=110;j>0;j--);
- }
- }
- main()
- {
- SCON=0; //使串口工作方式0
- EA=1;
- ES=1;
- TI=0;
- while(1)
- {
- SBUF=0xaa;
- d1=rx; //想使d1的状态受到RXD引脚上信号的控制,但没有成功
- delayms(1); //二极管一直没亮,如果一直亮还可能是频率太快了,但现在灯一直没
- //亮,请问是怎么回事?
- }
- }
- void ser_isr() interrupt 4
- {
- if(TI==1)
- TI=0;
- }
问题在注释里,谢谢了
假如d1可以正确接收到P3.0口的状态,但变化速度很快(灯应该一直都是亮的),有没有办法使发送数据的速度变慢点呢?
方式0:波特率固定为f/12,应该不用自己设置了吧
d1=rx;(P1^0=P3^0),51单片机能这么赋值吗?我都不记得了,我觉得好像只有FPGA才能连线这么定义吧
这个代码好怪,
1.这个是串口实验,但是SBUF只用了一次,只发送,没接收。楼主却只用了一个rx直接接收串口数据。但串口传输的时候,该口不是普通的IO口,估计是不能这样用的。你获取RX的瞬时电平状态,应该不能成功。
2.假设能获取RX电平成功,也不能直接赋值给另外一个IO作为输出状态。IO电平只是个IO状态的锁存器,它不能像其他数据一样流通到CPU里面处理,所以,输入脚电平不能直接赋值给输出口。
3.void ser_isr() interrupt 4应该是个串口接收中断函数,里面应该要清RI,不然就接收了一个byte后,就停止了。但里面你清的是TI,搞得都不知道是什么函数了。
4.发送操作 SBUF=0xaa; 另起函数,控制发送函数,就可以控制接收byte数据的频率了。当然,对方是接到一个回一个的前提下。
不知道我有没有理解错楼主的意图,呵呵,毕竟没看到原理图,不知道怎么接,只能按常规用法理所当然的说。假如讲错,请见谅!
我的本意是在实验 串口工作方式0 的时候,检查下数据的移位是否正确(用P1口的一个二极管来实现)
这样可以吗?
如何将使用SBUF发送一个字节的8位数据存入数组?
引用: 引用 10 楼 wangjun403 的回复:
我的本意是在实验 串口工作方式0 的时候,检查下数据的移位是否正确(用P1口的一个二极管来实现)
这样可以吗?
但为什么不接收完一个字节后一起判断,而非要一位一位地判断?难道时效性有这么重要吗?