个位大侠,我用51单片机串口中断从串口发送字符到电脑上,没有显示。UART 中断进不了,程序如下: 这是为什么呢?

请指教UART0串口程序M16C/R8C瑞萨单片机论坛-学习瑞萨单片机必上的中文论坛 - Powered by phpwind
查看完整版本: [--
请指教UART0串口程序
求m16c,UART0串口接收程序,我写的程序无法进入中断,请指教!谢谢了~~~
程序贴出来看看那啊
中断注册了吗?波特率对了吗?
做好有程序,我们看看中断向量,中断标志位,串口的设置,很多方面都可能造成中断进不去
论坛已有相关程序可供参考。或者把你的程序贴出来大家帮你看看。注意请另起新帖。
现在把程序贴上,sect30.inc我是看见别的程序有这个文件,才手动添加进去的,这样可以吗?#pragma&&&&interrupt&& uart0_receive() vect=18;void uart0_receive(void)&&&&{&&&&&&while(ri_u0c1 == 0);&&&& Re_data=(uchar)u0&&&&&&&& }uchar UART0_RXDATA(void){uchar temp=0;asm(&FCLR I&);&&&&&&&&//关闭所有中断&&&&re_u0c1=1;&&&&&&&&&&&&//允许接收&&&&&&&&&&&&&&&&&&&&ir_s0ric=0;&&&&&&&&&&&& //清中断请求u0irs_u0c1=1;&&&&&&&&//中断请求在结束数据发送时s0ric|=0x07;&&&&&&&&//开放中断,设置优先级&&&&asm(&FSET I&);&&&&&&&&//开放中断&&&&&&&&&&&&&&&&temp=Re_ir_s0ric=0;&&&&&&&&&&&&}void main(){uchar ask=0,i,temp1=0;ConfigureOperatingFrequency();UART0_Init(); while(1) {&&&&temp1=UART0_RXDATA();&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&}sect30.inc是改写.if&&&&1&&&&.lword&&&&dummy_int&&&&&&&&; vector 0 (BRK)&&&&&&&&.lword&&&&dummy_int&&&&&&&&; vector 1&&&&.lword&&&&dummy_int&&&&&&&&; vector 2&&&&.lword&&&&dummy_int&&&&&&&&; vector 3&&&&.lword&&&&dummy_int&&&&&&&&; vector 4&&&&.lword&&&&dummy_int&&&&&&&&; vector 5&&&&.lword&&&&dummy_int&&&&&&&&; vector 6&&&&.lword&&&&dummy_int&&&&&&&&; vector 7&&&&.lword&&&&dummy_int&&&&&&&&; vector 8&&&&.lword&&&&dummy_int&&&&&&&&; vector 9&&&&.lword&&&&dummy_int&&&&&&&&; vector 10&&&&.lword&&&&dummy_int&&&&&&&&; DMA0 (for user) (vector 11)&&&&.lword&&&&dummy_int&&&&&&&& ; DMA1 2 (for user) (vector 12)&&&&.lword&&&&dummy_int&&&&&&&&; input key (for user) (vector 13)&&&&.lword&&&&dummy_int&&&&&&&&; AD Convert (for user) (vector 14)&&&&.lword&&&&dummy_int&&&&&&&&; vector 15&&&&.lword&&&&dummy_int&&&&&&&&; vector 16&&&&.lword&&&&dummy_int&&&&&&&&; uart0 trance (for user) (vector 17)&&&&.glb&& _uart0_receive&&&&.lword uart0_receive&&&&&& ; vector 18 &&&&.lword&&&&dummy_int&&&&&&&&; uart1 trance (for user) (vector 19)&&&&.lword&&&&dummy_int&&&&&&&&; uart1 receive (for user) (vector 20)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER A0 (for user) (vector 21)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER A1 (for user) (vector 22)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER A2 (for user) (vector 23)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER A3 (for user) (vector 24)&&&&.lword&&dummy_int&&&&&&&&; TIMER A4 (for user) (vector 25)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER B0 (for user) (vector 26)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER B1 (for user) (vector 27)&&&&.lword&&&&dummy_int&&&&&&&&; TIMER B2 (for user) (vector 28)&&&&.lword&&&&dummy_int&&&&&&&&; INT0 (for user) (vector 29)&&&&.lword&&&&dummy_int&&&&&&&&; INT1 (for user) (vector 30)&&&&.lword&&&&dummy_int&&&&&&&&; INT2 (for user) (vector 31).else&&&&.lword&&&&dummy_int&&&&&&&&; BRK&&&&(vector 0)&&&&.lword&&&&dummy_int&&&&&&&&;&&&& (vector 1)&&&&.lword&&&&dummy_int&&&&&&&&;&&&& (vector 2)&&&&.lword&&&&dummy_int&&&&&&&&;&&&& (vector 3)&&&&.lword&&&&dummy_int&&&&&&&&; int3(for user)(vector 4)&&&&.lword&&&&dummy_int&&&&&&&&; timerB5(for user)(vector 5)&&&&.lword&&&&dummy_int&&&&&&&&; timerB4(for user)(vector 6)&&&&.lword&&&&dummy_int&&&&&&&&; timerB3(for user)(vector 7)&&&&.lword&&&&dummy_int&&&&&&&&; si/o4 /int5(for user)(vector 8)&&&&.lword&&&&dummy_int&&&&&&&&; si/o3 /int4(for user)(vector 9)&&&&.lword&&&&dummy_int&&&&&&&&; Bus collision detection(for user)(v10)&&&&.lword&&&&dummy_int&&&&&&&&; DMA0(for user)(vector 11)&&&&.lword&&&&dummy_int&&&&&&&&; DMA1(for user)(vector 12)&&&&.lword&&&&dummy_int&&&&&&&&; Key input interrupt(for user)(vect 13)&&&&.lword&&&&dummy_int&&&&&&&&; A-D(for user)(vector 14)&&&&.lword&&&&dummy_int&&&&&&&&; uart2 transmit(for user)(vector 15)&&&&.lword&&&&dummy_int&&&&&&&&; uart2 receive(for user)(vector 16)&&&&.lword&&&&dummy_int&&&&&&&&; uart0 transmit(for user)(vector 17)&&&&&&&&&&&&.glb&& _uart0_receive&&&&.lword uart0_receive&&&&&& ; vector 18 这样行吗?望指导!
&&.glb&& _uart0_receive&&&&.lword uart0_receive&&&&&& ; vector 18 这样改:&&.glb&& _uart0_receive&&&&.lword _uart0_receive&&&&&& ; vector 18 #pragma&&&&interrupt&& uart0_receive() vect=18;这样改:#pragma&&&&interrupt&& uart0_receive(vect=18)
改了之后就出现Error (ln30): d:\WorkSpace\gebiao19\gebiao19\Debug\intprg.r30 : Interrupt number '18' is multiple defined
引用第7楼ken_fremont于 09:40发表的 : 改了之后就出现 Error (ln30): d:\WorkSpace\gebiao19\gebiao19\Debug\intprg.r30 : Interrupt number '18' is multiple defined
该中断程序重复申明了把intprg.c里面对应向量为18的中断注释掉,包括#pragma语句
重复定义了。另一种方法:#pragma&&&&interrupt&& uart0_receive() void uart0_receive(void) ;
但还是进不了中断啊?牛哥
你主程序里面在不断的执行UART0_RXDATA()功能函数,这个函数在不断的关中断,开中断。是不是影响到了中断函数?
不知道。。。但改成void main(){&&&&&&&&uchar ask=0,i,temp1=0;&&&&&&&&ConfigureOperatingFrequency();&&&&&&&&UART0_Init();&&&&&&&&temp1=UART0_RXDATA();&&&&&&&&while(1);&&&&&&&&&&&&&&&&}还是不行~~~
硬件是否存在问题?你这个是做主机还是从机?
485电脑和单片机通信。。。。发送没问题。。。。
怎么没看到波特率的设置
你参考下:
初始化望了贴,不好意思void UART0_Init(void){&&&&pd1_4=1;&&&&&&&&&&&&&&&&&&&&//TXD0设置为输出pd1_5=0;&&&&&&&&&&&&&&&&&&&&//RXD0设置为输入&&&&&&&&&&&&&&&&pd1_6=0;&&&&&&&&&&&&&&&&&&&&//clk0拉低pd1_3=1;p1_3=0;&&&&&&&&&&&&&&&&&&&&&&&&//使能485&&&&u0mr = 0x05;&&&&&&&&//设数据长度为8位,无奇偶校验,1停止位,使用内部时钟u0c0 = 0x00;&&&&&&&&//先传MSB,下降沿输出发送数据,上升沿输入接收数据&&&&u0brg = 0x40;&&&&&&&&//波特率9600,外部晶振10MHz;&&&&u0tb=0;&&&&u0c1 = 0x05;&&&&&&&&&&&&&&&&//允许发送,接收,发送(接收)寄存器中有数据}输出波形104us左右,波特率正常!
看过了,也没什么头绪。。呵呵。。。
那你可以试试,单片机发送给电脑,看看电脑接收是否正常?这样可以测试你的硬件和程序是否OK。
正常,单片机发0x02,串口调试工具收到FB,去除起始位和结束位,然后取反,跟电脑发0x02输出来的波形一摸一样!
#pragma&&&&interrupt&& uart0_receive() void uart0_receive(void) ;是否应该改成:#pragma&&&&interrupt&& _uart0_receive() void& _uart0_receive(void) ;好多实例是这样的
你建立工程的方法对吗?把你的步骤写出来?
20楼,你不会把串口的连接线做错了吧?反了没?
接收中断优先级是否设置了?仔细参考《R8C/M16C的串口(UART)通信例子 》里的每个寄存器的设置。
论坛里面,有一个叫大常的发了这个帖子,他的程序是正确的
难道是我建工程的时候忽略了什么?初学,什么都不会,请大家指点,怎样建立才对?
论坛已经有相关的教程。你找找看。有时候一个问题可能困惑你很久,但是要有耐心。
用串口调试工具发数,你接收一下试试,看看RXD上面的信号对不对啊!中断程序这样声明自己的.c文件#pragma&&&&interrupt&& uart0_receive() void uart0_receive(void) ;sect30.inc文件 .glb&& _uart0_receive .lword _uart0_receive&&&&&& ; vector 18 初始化函数中没有设定接收中断的优先级啊此外,你的接收函数UART0_RXDATA有问题,如果是单纯接收数据,没有必要用这个函数,因为你已经设置了中断了程序流程应该是这样的1)设置系统时钟2)初始化串口寄存器(所有相关寄存器都要设)3)开中断4)循环等待,直到发出的数被接收后进入中断取数时序上也要很清楚,不要还没有设定好单片机方的串口寄存器,另一边就把数发出来了,那样也接不到
大常也是沧海一粟,哈哈,申请了两个号!
查看完整版本: [--
Powered by
Time 0.035226 second(s),query:2 Gzip enabled个位大侠,我用51单片机从串口发送字符到电脑上,没有显示。UART 中断进不了,程序如下: 这是为什么呢?_百度知道stc12c5410单片机,PL2303烧写器与电脑连接,想用串口助手显示发送的值,下面是程序,为什么显示不出来?_百度知道个位大侠,我用51单片机从串口发送字符到电脑上,没有显示。UART 中断进不了,程序如下: 这是为什么呢?_百度知道各位大哥,我用STM32F103的串口,怎么老是进发送中断啊//UART4中断服务void UART4_Isr(void){ if(USART_GetITStatus(UART4,USART_IT_RXNE)) {
OSSemPost(UartRxSem);
USART_ClearITPendingBit(UART4,USART_IT_RXNE); } if(USART_GetITStatus(UART4,USART_IT_TXE)) {
OSSemPost(UartTxSem);
USART_ClearITPendingBit(UART4,USART_IT_TXE);
USART_ClearFlag(UART4,USART_FLAG_TXE);
//USART_ITConfig(UART4,USART_IT_TXE,DISABLE); }}各位大哥,帮小弟看看是肿么回事啊--------------------------------------------------------------碰见过,就是串口问题,中断使能后等接收或是发送完成后要关闭使能,下次发送或是接收的时候在使能就ok了

我要回帖

更多关于 单片机串口中断 的文章

 

随机推荐