完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序如下:
int i=0; int RXnum=0,TXnum=0,flag=0; /*-------------异步通信终端设置-----------------*/ #pragma code high_vector_section=0x08 /*高优先级转跳至0x08*/ void high_vector (void) { _asm goto PIC18F_HIGH_isr _endasm/*转跳*/ } #pragma code/*回到默认代码段*/ #pragma code low_vector_section=0x18 /*低优先级跳转到0x18处*/ void low_vector (void) { _asm goto PIC18F_LOW_isr _endasm/*转跳*/ } #pragma code/*回到默认代码段*/ /*---高优先级中断服务程序---*/ #pragma interrupt PIC18F_HIGH_isr void PIC18F_HIGH_isr (void) { if(PIR1bits.RCIF&&PIE1bits.RCIE)/*将输入的数据存入data数组*/ { data[RXnum]=RCREG; //PIR1bits.RCIF=0; RXnum++; if(RXnum>15) { RXnum=0;/*计数器清零*/ flag=1;/*标志位置1表示收满16个数*/ PIE1bits.RCIE=0;/*关闭接收防止溢出*/ } } if(PIR1bits.TXIF&&PIE1bits.TXIE) { TXREG=i; //while(!TXSTAbits.TRMT); i++; if(i>255) { i=0; flag=0;/*标志清零*/ PIE1bits.TXIE=0;/*关闭中断*/ //PIR1bits.TXIF=0; } //PIE1bits.TXIE=0; } } /*---低优先级中断服务程序---*/ #pragma interrupt PIC18F_LOW_isr void PIC18F_LOW_isr (void) { } /*初始化串口*/ void usart_init() { INTCONbits.GIE=0;/*关全局中断*/ TRISC=0xdf;/*初始化C端口输出*/ RCSTA=0x90;/*@输入引脚初始化*/ TXSTA=0x24;/*@输出引脚初始化*/ IPR1=0x30;/*@设定串口接收发送中断高优先级*/ PIE1=0x20;/*@串口中断设置*/ INTCONbits.PEIE=1;/*@外设中断允许*/ SPBRG=10000000/64*(1*3+1)/9600-1;/*@波特率寄存器置值,设置波特率*/ //INTCONbits.GIEL=1;/*@低优先中断*/ INTCONbits.GIE=1;/*@开总中断*/ } /*串口发送*/ void usart_tx() { PIE1bits.TXIE=1; } void main(void) { toppic_init();/*TOPPIC开发板初始化*/ usart_init();/*eusart异步通讯初始化*/ while(1) { usart_tx();/*写输出*/ delay(5); } } 小弟初学PIC,程序要求发送00到FF然后停止等下一个5S内再打开串口发送00到FF,现在数字是发送了但是程序跑飞了,连续传送停不下来。。。 PIE1bits.TXIE=0; 不是应该能关闭发送中断麽。。。为什么我停不下来啊?求教。。。 |
|
相关推荐
10个回答
|
|
|
|
|
|
if(PIR1bits.TXIF&&PIE1bits.TXIE)
{ PIR1bits.TXIF=0; TXREG=i; //while(!TXSTAbits.TRMT); i++; if(i>255) { i=0; flag=0;/*标志清零*/ PIE1bits.TXIE=0;/*关闭中断*/ //PIR1bits.TXIF=0; } //PIE1bits.TXIE=0; } 此处应该在进入中断时就清0标志位 |
|
|
|
还有你这有些语句不应该注释掉的;如//while(!TXSTAbits.TRMT);//PIR1bits.RCIF=0;
|
|
|
|
不行欸程序还是飞得不要不要的T.T |
|
|
|
BOSS说中断不要添加任何查询、延时来降低效率。。让单片机根据中断自己工作。。 |
|
|
|
搞定问题了。。。程序没有问题,主程序的头文件里忘记include delay了。。。多谢大家的帮助。
另外,PIC18F里读取完一个数RCIF会自动清零,所以我这里加了这句语句同时注释掉让自己心里有个数罢了 |
|
|
|
|
|
|
|
没有#include“delay.h”程序也能编译通过吗?,你main函数里调用了delay函数啊
|
|
|
|
确实很奇怪。。。没考虑过会是这方面问题。感觉MPlab挺奇怪的,经常有些build和program的错误检测不出来。。。之前接的实验版的GND坏掉了竟然也是program成功。。。 |
|
|
|
路过看看!
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2097 浏览 1 评论
3651 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2349 浏览 2 评论
2776 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4062 浏览 5 评论
1004浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6389浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:40 , Processed in 0.879282 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号