- 打卡等级:常住居民III
- 打卡总天数:135
- 最近打卡:2025-04-30 10:11:34
高级会员
- 积分
- 749
|
本帖最后由 DebugLab 于 2024-9-12 12:08 编辑
如图箭头所指处断电重新上电后串口无回复,接线未动,重新烧录一次程序后正常,单片机型号8h3k6s4
void main(void)
{
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
P0M1 = 0x00; P0M0 = 0x08; //设置P0准双向口,P0.3推挽输出
P1M1 = 0x30; P1M0 = 0x30; //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
P2M1 = 0x00; P2M0 = 0xff; //设置P2推挽输出
P3M1 = 0x00; P3M0 = 0x00; //设置P3准双向口
P4M1 = 0x3c; P4M0 = 0x3c; //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
P5M1 = 0x0c; P5M0 = 0x0c; //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
P6M1 = 0xff; P6M0 = 0xff; //设置为漏极开路(实验箱加了上拉电阻到3.3V)
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
UART1_config(1); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
UART2_config(2); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
UART3_config(0); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer3做波特率.
EA = 1; //允许全局中断
PrintString3("STC8H8K64U UART1 Test Programme!\r\n"); //UART3发送一个字符串
while (1)
{
if((RX3_Buffer[0] ==0x21)&&(RX3_Buffer[1] ==0x12)&&(RX3_Buffer[2] ==0x01))
{
delay_ms(20);
databuf[0]=RX3_Buffer[2];
databuf[1]=0;
databuf[2]=RX3_Buffer[4];
databuf[3]=RX3_Buffer[5];
databuf[4]=RX3_Buffer[6];
databuf[5]=RX3_Buffer[7];
databuf[6]=RX3_Buffer[8];
databuf[7]=RX3_Buffer[9];
databuf[8]=RX3_Buffer[10];
databuf[9]=RX3_Buffer[11];
databuf[10]=RX3_Buffer[12];
databuf[11]=RX3_Buffer[13];
databuf[12]=RX3_Buffer[14];
databuf[13]=RX3_Buffer[15];
databuf[14]=RX3_Buffer[16];
databuf[15]=RX3_Buffer[17];
databuf[16]=RX3_Buffer[18];
databuf[17]=RX3_Buffer[19];
databuf[18]=RX3_Buffer[20];
databuf[19]=0;
RX3_Buffer[0] =0x00;
modbuscrc = MODBUS_CRC16(databuf, 20);
crcbuf[0]=(u8)(modbuscrc>>8);
crcbuf[1]=(u8)modbuscrc;
UART3_TxByte(0x21);
UART3_TxByte(0x12);
uart3_send_array(databuf, 20);
uart3_send_array(crcbuf, 2);
UART3_TxByte(0x40);
}
}
|
|