fjstcmcu 发表于 2023-5-12 22:15:50

STC8C STC89C52定时器0 串口0 这些SRF一样?

现在用STC8C32S2代替STC89C52RC   动作不正常怀疑定时器0   串口0设置不对   ,有用到STC8C32S2大侠援助下,这两个芯片的相关寄存器是否一致?

angmall 发表于 2023-5-15 20:05:02

这两个芯片的相关寄存器是一致的
不过一个STC89是12T另外一个STC8C是1T。




STC8C2K32S2 定时器0和串口0的设置

#include "reg51.h"
#include "intrins.h"

sfr   T2L   =   0xd7;
sfr   T2H   =   0xd6;
sfr   AUXR    =   0x8e;

sfr   P0M1    =   0x93;
sfr   P0M0    =   0x94;
sfr   P1M1    =   0x91;
sfr   P1M0    =   0x92;
sfr   P2M1    =   0x95;
sfr   P2M0    =   0x96;
sfr   P3M1    =   0xb1;
sfr   P3M0    =   0xb2;
sfr   P4M1    =   0xb3;
sfr   P4M0    =   0xb4;
sfr   P5M1    =   0xc9;
sfr   P5M0    =   0xca;

sfr   P_SW1   =   0xa2;

sbit    P10   =   P1^0;
sbit    P11   =   P1^1;
sbit    P12   =   P1^2;

void UART1_Isr() interrupt 4
{
    if (TI)
    {
      TI = 0;                                 //清中断标志
      P10 = !P10;                           //测试端口
    }
    if (RI)
    {
      RI = 0;                                 //清中断标志
      P11 = !P11;                           //测试端口
    }
}

void TM0_Isr() interrupt 1//1毫秒@11.0592MHz
{
    P12 = !P12;                                 //测试端口
}

void main()
{
    P0M0 = 0x00;            //设置P0.0~P0.7为双向口模式
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
       
//串口1切换
    P_SW1 = 0x00;                               //RXD/P3.0, TXD/P3.1
//P_SW1 = 0x40;                               //RXD_2/P3.6, TXD_2/P3.7
//P_SW1 = 0x80;                               //RXD_3/P1.6, TXD_3/P1.7
//P_SW1 = 0xc0;                               //RXD_4/P4.3, TXD_4/P4.4


        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式   //定时器0 模式0
    TL0 = 0x66;                                 //65536-11.0592M/12/1000
    TH0 = 0xfc;                    //设置定时初始值
        TF0 = 0;                                //清除TF0标志
    TR0 = 1;                                    //启动定时器 定时器0开始计时
    ET0 = 1;                                    //使能定时器中断


    SCON = 0x50;            //8位数据,可变波特率
        AUXR |= 0x01;                  //串口1选择定时器2为波特率发生器
        AUXR |= 0x04;                  //定时器时钟1T模式
    T2L = 0xe8;                                 //65536-11059200/115200/4=0FFE8H
    T2H = 0xff;                    //设置定时初始值    //115200bps@11.0592MHz
        AUXR |= 0x10;                  //定时器2开始计时    //启动定时器                        
    ES = 1;                                     //使能串口中断
    EA = 1;
    SBUF = 0x5a;                              //发送测试数据

    while (1);
}








fjstcmcu 发表于 2023-6-4 15:02:29

谢谢楼上!但感觉还是有不一样的 我89C52的程序放8C上串口0用定时器1下载后没有输出

神农鼎 发表于 2023-6-4 16:02:32

STC8C2K的串口程序直接参考下文




求STC8系列4个串口同时通信的程序,Modbus 演示程序 - 串行口,DMA支持的4组串口 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

梁工 发表于 2023-6-4 21:58:51

STC8C所有定时器都可以1T或12T,建议使用16位自动重装。串口波特率计算不同,定时器1T,16位自动重装。则16位重装值 = 65536 - fosc/4/Baudrate。
页: [1]
查看完整版本: STC8C STC89C52定时器0 串口0 这些SRF一样?