|
目前使用串口3,P16與P17,控制SP485芯片,之前懷疑HYM芯片與SP485芯片不能替換,但是更換HYM芯片一樣還是不能通訊。
程序為測試程序,只發(fā)送不接收,目前串口無任何反應,
P16與P17需要用到內部時鐘,TNOW(P14)也設置為推挽輸出模式,電平已經拉高。
希望大神幫忙看一看哪里有問題。。。
#include "config.h"
#include "USART1.h"
#include "delay.h"
#include "GPIO.h"
u8 idata CRC[2];
u8 data1,data2;
u8 pf;
u8 flag,flag1;
sbit key2=P1^4;
#define FOSC 11059200L
sbit T0CLKO = P3^5; //定時器0的時鐘輸出腳
#define F38_4KHz (65536-FOSC/2/38400) //1T模式
//#define F38_4KHz (65536-FOSC/2/12/38400) //12T模式
//-----------------------------------------------
void timet0()
{
AUXR |= 0x80; //定時器0為1T模式
// AUXR &= ~0x80; //定時器0為12T模式
TMOD = 0x00; //設置定時器為模式0(16位自動重裝載)
TMOD &= ~0x04; //C/T0=0, 對內部時鐘進行時鐘輸出
// TMOD |= 0x04; //C/T0=1, 對T0引腳的外部時鐘進行時鐘輸出
TL0 = F38_4KHz; //初始化計時值
TH0 = F38_4KHz >> 8;
TR0 = 1;
INT_CLKO = 0x01; //使能定時器0的時鐘輸出功能
}
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //結構定義
GPIO_InitStructure.Pin = GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化
}
void UART_config(void)
{
COMx_InitDefine COMx_InitStructure; //結構定義
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer2; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 19200ul; //波特率, 一般 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允許, ENABLE或DISABLE
COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
COMx_InitStructure.UART_Interrupt = ENABLE; //中斷允許, ENABLE或DISABLE
COMx_InitStructure.UART_Polity = PolityLow; //中斷優(yōu)先級, PolityLow,PolityHigh
COMx_InitStructure.UART_P_SW = UART1_SW_P16_P17; //切換端口
COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //內部短路RXD與TXD, 做中繼, ENABLE,DISABLE
USART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2
//PrintString1("STC15F2K60S2 UART1 Test Prgramme!\r\n"); //SUART1發(fā)送一個字符串
}
void send(void)
{
key2=1;
delay_ms(200);
SBUF=0x01;
while(TI==0)
{
;
}
TI=0;
key2=0;
delay_ms(200);
key2=1;
if(data1!=0x01)
{
SBUF=0x0f;
while(TI==0)
{
;
}
TI=0;
}
else{
SBUF=0x09;
while(TI==0)
{
;
}
TI=0;
}
}
/**********************************************/
void main(void)
{
u8 i;
u16 data1;
u8 data2=0;
timet0();
UART_config();
GPIO_config();
EA = 1;
while (1)
{
if(key2==1)
send();
delay_ms(200);
}
}
|
|