奇了怪了,STC8H使用DMA发送串口数据,TIMER0就乱了。
奇了怪了,stc8H使用DMA发送串口数据,TIMER0就乱了。不用DMA发送,TIMER0中断就好了,能正常定时本帖最后由 zcllom 于 2023-3-21 15:35 编辑
void UART1_DMA_Config(void)
{
DMA_UR1T_CFG = 0x80; //bit7 1:Enable Interrupt
DMA_UR1T_STA = 0x00;
}
void UART1_DMA_Transmit(u8 *pData, u16 Size)
{
if(Size == 0) return;
Size -= 1;
DMA_UR1T_AMT = (u8)Size; //设置传输总字节数:n+1
DMA_UR1T_TXA = (u8)pData;
DMA_UR1T_CR = 0xc0; //bit7 1:使能 UART4_DMA, bit6 1:开始 UART1_DMA 自动发送
}
void Uart1Init(void) //9600bps@22.1184MHz //调试接口
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xC0; //设置定时初始值
TH1 = 0xFD; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
P_SW1 &= 0x3f;
P_SW1 |= 0x40; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
//ES= 1; //允许中断
//REN = 1; //允许接收
B_TX1_Busy = 0;
}
void Timer0_init(void) //1500微秒@22.1184MHz
{
INTCLKO &= ~0x01; //不输出时钟
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x66; //设置定时初始值
TH0 = 0x7E; //设置定时初始值
ET0 = 1; //允许中断
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
你好 参考一下范例程序 下载地址:https://www.stcai.com/filedownload/618387
zcllom 发表于 2023-3-21 15:33
void UART1_DMA_Config(void)
{
DMA_UR1T_CFG = 0x80; //bit7 1:Enable Interrupt
下面这句修改一下再看看
zhp 发表于 2023-3-21 21:39
下面这句修改一下再看看
好,我按照这个建议试试
页:
[1]