Microchip
直播中

蒋思颖

7年用户 205经验值
私信 关注
[问答]

在Proteus 8仿真中RTS引脚始终处于高阻抗状态

你好!IM新的PIC24,IM使用PIC24FJ128GA106,并尝试在proteus 8模拟。IM使用VT100终端Proteus。在proteus中加载十六进制文件并开始模拟之后,RTS引脚(RD10引脚)上的状态保持高阻抗。以下是我的代码:includedefine U_ENABLE 0x8008define U_TX 0x0400\define BRATE 12void init(void);int put(int c);char get(void){/**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************=6;//RP3->RTS//Lock Registers_builtin_write_OSCCONL(OSCCON|0x40);/*****************************************************************************/U2BRG=BRATE;U2MODE=U_ENABLE;U2STA=U_TX;TRISDbits.TRISD10=0;//o/p RTS LATDbits.LATD10=1;}

回帖(3)

薄坤坤

2019-9-24 10:22:58
1)不信任模拟器-他们可以添加另一层错误,和不同的实际硅。如果您怀疑您的代码是100%,那么您确实需要在真正的硬件上检查一下2)您确实需要向我们展示所有代码(最好是显示问题的简单程序的代码),包括配置设置。我们不能看到外围设备是如何被使用的,因为问题3)我已经破译了隐藏在.后面的魔术数字(直接设置控件和状态寄存器中的位确实更容易阅读——而且您通常应该设置配置位,然后使外围设备处于安全的一侧,并且您已经设置了UN位为0B00。在数据表中,它清楚地表明,这是告诉设备使用Tx和RX引脚只,而不是RTS和CTS引脚。因此,你希望RTS引脚做什么?(如果答案是你自己控制它,那么就不要映射它。)4)直到你把所有的事情都弄清楚为止,我建议你不要玩IOLOCK位——打开状态的电源是解锁的,这可能是离开状态的最佳方式(尤其是作为IOL1WAY配置b的默认设置)。它只允许它解锁一次。5)请使用“代码”标签,它使代码更容易阅读。
举报

李之涵

2019-9-24 10:37:35
谢谢澳洲!下面是带有配置信息的整个代码。我会在真正的硅片上试试!********************************************************************************************************************************************************************************************************************************************************包括<_p24fffffffj128j128128128ga106 106.106.h>____<_p24fffj128128128ga106.h>************************p p p p p24f书面保护离子禁用位(禁用分段代码保护)#pragma配置WPCFG=WPCFGDIS//Configuration Word Code Page Protection Select bit(最后一页(在程序存储器顶部)和Flash配置字不受保护)#pragma配置WPEND=WPENDMEM//分段写保护结束页段ect位(从WPFP写入保护到内存的最后一页)//CONFIG2#pragma配置POSCMOD=XT//主振荡器选择(选择XT振荡器模式)#pragma配置IOL1WAY=OFF//IOLOCK单向设置启用位(对RP寄存器的无限制写入)#pragma配置OSCIOFNC=OFF//主振荡器振荡器输出功能(OSCO功能为CLKO(FOSC/2))pragma config FCKSM=CSDCMD//时钟切换和监视器(时钟切换和故障安全时钟监视器都被禁用)#pragma config FNOSC=PRI//振荡器选择(主振荡器(XT,HS,EC))pragma config IESO=OFF//内部输出三重切换模式(IESO模式(双速启动)禁用)//CONFIG1#pragma配置WDTPS=PS32768//看门狗定时器后置定时器(1:32768)#pragma配置FWPSA=PR128//WDT前置定时器(1:128的预置定时器比率)#pragma配置WINDIS=OFF//看门狗定时器窗口(标准看门狗定时器已启动)已启用(禁用Windows模式)#pragma配置FWDTEN=OFF//Watchdog定时器启用(禁用Watchdog定时器)#pragma配置ICS=PGx1//Comm通道选择(仿真器功能与PGEC1/PGED1共享)#pragma配置GWRP=OFF//通用代码段写保护(写入程序备忘录)#pragma config GCP=OFF//General Code Segment Code Protect(禁用代码保护)pragma config JTAGEN=ON//JTAG Port Enable(启用JTAG端口)//I/O定义includedefine CTS_RB1define RTS_RD10/define TRTS TRISD10define U_E****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************OR1bit.RP3R4; //'4'表示U1RTS_builtin_write_write_OSCCONL(OSCCON&;0xBF);/********************************************************************************************************************************************************************************************************************************************************************************************************************************p RTS/**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************STA=0;//U1STAbits.ADDEN=1;//Address.ionenabledU1MODE=U_ENABLE;//Enable Uart for 8位数据//无奇偶性,1STOP位,wake enabledU1STAbits.UTXEN=1;//Enable TransmitIEC0bits.U1TXIE=1;//Enable Transmit Inter.IEC0bits.U1RXIE=1;//EnableReceiveInter./****************************************************************************//LATDbits.LATD10=1;}void put(int c){.(PORTBbits.RB1);//wait cts.(U1STAbits.UTXBF);//wait而tx缓冲区已满U1TXREG=c;}char get(void){LATDbits.LATD10=0;//assert请求发送.(!//等待新字符到达,等待新字符返回U1RXREG;LATD比特。LATD10=1;}LATD10=1;}void_u.u.(u inter中断_u_中断_u u_u(u inter._u中断_u auto_psv_auto_auto_psv))U1TXI中断中断_U1TX中断(VU1TIFS0bits.U1T0bits.U1TXbits.U1TXIF=0);{(IFS0bits.U1TXIF=0;{U1TXIF=0;}vovoid}}vovovovovovovoidvoid_IFS0bits.U1RXIF=0;}/************************************//main .c包括“DEXH”int main(空){char c;int();而(1){PUT(r);}返回0;}
举报

薄坤坤

2019-9-24 10:51:33
请重新阅读我以前的评论,特别是关于使用代码标签的第5点,以及如何初始化UART的第3条!1)不包括处理器特定的包含语句。IDE将让您指定处理器,而lt;xc.h & gt;将使用它来设置您需要的所有东西。当然你也不需要包括两次!2)请不要费心尝试在这个阶段解锁和锁定PPS寄存器。默认设置上的电源使它们解锁,这就是你想要的。还有,您的代码是错误的——您有与锁定相同的解锁指令,因此应该警告您有错误。幸运的是,在这两种情况下,你都可以解锁PPS寄存器,这样你就很幸运了。3)如果你不打算使用UART,就不要使用中断。所有你正在做的是重置IF标志(这是你应该做的),但是因为没有其他事情发生,它们是无用的。4)当你初始化UART时,你仍然将U1模式寄存器中的UUN位设置为0,所以CTS和RTS引脚不被使用!!!!!!!苏珊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分