关于S2CON, STC8H1K08T | 【ISP软件,范例程序】中有 串口2的演示程序
大家好!芯片STC8G1K08T芯片的S2CON始终为0X00,不能修改,是什么原因?
SCON能够改变;下面程序不能运行。
#include <stc8h.h>
void Uart2_Init(void) //2400bps @11.0592MHz
{
P_SW2 = 0x80; //b7=1:允许访问RAM区的特寄存器 (8位模式请使用这句,注释上一句);默认值为0
S2CON = 0x50; //8位数据,可变波特率;无法改变; B1111_1101 ???
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xA0; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
// EA = 1; //总中断打开
// IE2 = 0; //关闭串口2中断
}
void main(void)
{
Uart2_Init();
while(1){
S2BUF = 0xA5;
while (!(S2CON &0x02)); //清S2TI
S2CON &= 0x0FD;
}
}
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
sfr AUXR = 0x8e;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IE2 = 0xaf;
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;
bit busy;
char wptr;
char rptr;
char buffer;
void Uart2Isr() interrupt 8
{
if (S2CON & 0x02)
{
S2CON &= ~0x02;
busy = 0;
}
if (S2CON & 0x01)
{
S2CON &= ~0x01;
buffer = S2BUF;
wptr &= 0x0f;
}
}
void Uart2Init()
{
S2CON = 0x10;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x14;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void Uart2Send(char dat)
{
while (busy);
busy = 1;
S2BUF = dat;
}
void Uart2SendStr(char *p)
{
while (*p)
{
Uart2Send(*p++);
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
Uart2Init();
IE2 = 0x01;
EA = 1;
Uart2SendStr("Uart Test !\r\n");
while (1)
{
if (rptr != wptr)
{
Uart2Send(buffer);
rptr &= 0x0f;
}
}
}
https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf
谢谢!
你提供的程序存在同样的问题,S2CON寄存器的内容不能配置,始终为0,
8H/8G/8C/8A系列4组串口同时通信的程序,Modbus 演示程序;可共享T2做波特率发生器 - 串行口,DMA支持的4组串口,RS232,RS485,Modbus, CRC16 国芯技术交流网站 - AI32位8051交流社区
8H上电高阻,你没有设置IO模式
可以看下我的串口程序(以串口1为例)
https://www.stcaimcu.com/thread-16321-1-1.html
以下是串口2程序:
初始化:
P_SW2|=0x80;
P0M0=0x00;
P0M1=0x00;
P1M0=0x00;
P1M1=0x00;
P2M0=0x00;
P2M1=0x00;
P3M0=0x00;
P3M1=0x00;
P4M0=0x00;
P4M1=0x00;
P5M0=0x00;
P5M1=0x00;
P6M0=0x00;
P6M1=0x00;
P7M0=0x00;
P7M1=0x00;
//IO模式根据需要设置
P_SW2|=0x01; //设置UART2端口为UART2_2
AUXR=0x15; //设置定时器0为12T模式,设置定时器1为12T模式,使能定时器2,设置定时器2为1T模式
TMOD=0x00; //设置定时器0为16位自动重载模式,设置定时器1为16位自动重载模式
TL0=0x00; //设置定时器0初值(5ms)
TH0=0xDC; //设置定时器0初值(5ms)
ET0=1; //使能定时器0中断
SCON=0x50; //UART1模式为8位数据,可变波特率
S2CON=S2REN; //UART2模式为8位数据,可变波特率
T2L=BRT; //设置波特率
T2H=BRT>>8; //设置波特率
ES=1; //使能UART1中断
IE2|=ES2; //使能UART2中断
EA=1; //使能总中断中断:
void Uart2_Isr(void) interrupt 8
{
if(S2CON&S2RI)
{
S2CON&=~S2RI;
//接收
}
if(S2CON&S2TI)
{
S2CON&=~S2TI;
//发送
}
}
STC8G1K08T几年前寄来的,是试制品?昨天新买两片不带T的,STC8H1K08及STC8G1K08能正常读写S2CON了 姓伍的 发表于 2025-7-7 13:10
STC8G1K08T几年前寄来的,是试制品?昨天新买两片不带T的,STC8H1K08及STC8G1K08能正常读写S2CON了 ...
T不是触摸按键(Touch Key)???
没听说过这个型号
页:
[1]
2