找回密码
 立即注册
查看: 44|回复: 13

求助:15W4K48S串口3与串口2不能同时使用

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-30 09:22:48
已绑定手机

2

主题

3

回帖

24

积分

新手上路

积分
24
发表于 昨天 09:22 来自手机 | 显示全部楼层 |阅读模式
我的程序用了串口1和2,串口1接的是485外设,串口2接触摸屏显示数据,程序已经调试通过没问题。
现在加了一个串口3,希望与上位机通信,现在单片机通过串口3向上位机发送数据没问题,
但是当上位机向串口3发送数据时串口2数据就不正常了,出现乱码。
曾怀疑是自己程序错误,我用同样的程序改用串口4来做,就一切正常,
请问哪位大神可以帮忙解答一下



STC_learn.rar (108.46 KB, 下载次数: 1)

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-30 09:22:48
已绑定手机

2

主题

3

回帖

24

积分

新手上路

积分
24
发表于 昨天 09:23 来自手机 | 显示全部楼层
不知道怎样上传代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-07-01 09:00:47

33

主题

2439

回帖

5198

积分

论坛元老

积分
5198
发表于 昨天 09:28 | 显示全部楼层
附件 传工程的压缩包
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:223
  • 最近打卡:2025-07-01 08:45:55
已绑定手机

72

主题

2028

回帖

4556

积分

荣誉版主

无情的代码机器

积分
4556
发表于 昨天 09:30 | 显示全部楼层
截图202506300930239840.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 09:35 | 显示全部楼层
这有个 32位 AI8051U 的程序,拿去修改下:
截图202506300934311430.jpg


#include <AI8051U.H>                        //包含AI8051U的头文件
// 改成需要的头文件

#include "intrins.h"                        //使用_nop_()函数所必须要包含的头文件,
                                                                //否则延时函数中调用的_nop_()函数没有被头文件引用过来,
                                                                //会导致编译器找不到这个而函数而报错。

unsigned char uart1_txflag = 0;        //定义1个位变量,UART1事件位变量标志,记录UART1已产生发送中断
// 供主循环查询UART1是否已产生发送中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart1_rxflag = 0;        //定义1个位变量,UART1事件位变量标志,记录UART1已产生接收中断
// 供主循环查询UART1是否已产生接收中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart2_txflag = 0;        //定义1个位变量,UART2事件位变量标志,记录UART2已产生发送中断
// 供主循环查询UART2是否已产生发送中断,在主循环中处理UART2的中断事件任务,不堵塞其他中断
unsigned char uart2_rxflag = 0;        //定义1个位变量,UART2事件位变量标志,记录UART2已产生接收中断
// 供主循环查询UART2是否已产生接收中断,在主循环中处理UART2的中断事件任务,不堵塞其他中断
unsigned char uart3_txflag = 0;        //定义1个位变量,UART3事件位变量标志,记录UART3已产生发送中断
// 供主循环查询UART3是否已产生发送中断,在主循环中处理UART3的中断事件任务,不堵塞其他中断
unsigned char uart3_rxflag = 0;        //定义1个位变量,UART3事件位变量标志,记录UART3已产生接收中断
// 供主循环查询UART3是否已产生接收中断,在主循环中处理UART3的中断事件任务,不堵塞其他中断
unsigned char uart4_txflag = 0;        //定义1个位变量,UART4事件位变量标志,记录UART4已产生发送中断
// 供主循环查询UART4是否已产生发送中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart4_rxflag = 0;        //定义1个位变量,UART4事件位变量标志,记录UART4已产生接收中断
// 供主循环查询UART4是否已产生接收中断,在主循环中处理UART4的中断事件任务,不堵塞其他中断

void Uart1_Init(void)                        //115200bps@40.000MHz
{
        SCON = 0x50;                                //8位数据,可变波特率
        AUXR |= 0x40;                                //定时器时钟1T模式
        AUXR &= 0xFE;                                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                                //设置定时器模式
        TL1 = 0xA9;                                        //设置定时初始值
        TH1 = 0xFF;                                        //设置定时初始值
        ET1 = 0;                                        //禁止定时器中断
        TR1 = 1;                                        //定时器1开始计时
        ES = 1;                                                //使能串口1中断
}

void Uart2_Init(void)                        //115200bps@40.000MHz
{
        S2CON = 0x50;                                //8位数据,可变波特率
        AUXR |= 0x04;                                //定时器时钟1T模式
        T2L = 0xA9;                                        //设置定时初始值
        T2H = 0xFF;                                        //设置定时初始值
        AUXR |= 0x10;                                //定时器2开始计时
        IE2 |= 0x01;                                //使能串口2中断
}

void Uart3_Init(void)                        //115200bps@40.000MHz
{
        S3CON = 0x10;                                //8位数据,可变波特率
        S3CON |= 0x40;                                //串口3选择定时器3为波特率发生器
        T4T3M |= 0x02;                                //定时器时钟1T模式
        T3L = 0xA9;                                        //设置定时初始值
        T3H = 0xFF;                                        //设置定时初始值
        T4T3M |= 0x08;                                //定时器3开始计时
        IE2 |= 0x08;                                //使能串口3中断
}

void Uart4_Init(void)                        //115200bps@40.000MHz
{
        S4CON = 0x10;                                //8位数据,可变波特率
        S4CON |= 0x40;                                //串口4选择定时器4为波特率发生器
        T4T3M |= 0x20;                                //定时器时钟1T模式
        T4L = 0xA9;                                        //设置定时初始值
        T4H = 0xFF;                                        //设置定时初始值
        T4T3M |= 0x80;                                //定时器4开始计时
        IE2 |= 0x10;                                //使能串口4中断
}

void main (void)
{
      //  EAXFR = 1;                                        //允许访问扩展的特殊寄存器,XFR
      //  WTST = 0;                                        //设置取程序代码等待时间,赋值为0表示不等待,程序以最快速度运行
      //  CKCON = 0;                                        //设置访问片内的xdata速度,赋值为0表示用最快速度访问,不增加额外的等待时间



// STC15W4K32S4系列,上面3句 不适用
// 加上下面这句

    P_SW2 |= 0x80;                              //使能XFR访问


        P0M0 = 0x00; P0M1 = 0x00;         //设置 P0 口为准双向口模式
        P1M0 = 0x00; P1M1 = 0x00;         //设置 P1 口为准双向口模式
        P2M0 = 0x00; P2M1 = 0x00;         //设置 P2 口为准双向口模式
        P3M0 = 0x00; P3M1 = 0x00;        //设置 P3 口为准双向口模式
        P3M0 = 0x00; P3M1 = 0x0c;         //P32、P33设置为高阻输入(需要同步开启上拉电阻)
        P4M0 = 0x00; P4M1 = 0x00;         //设置 P4 口为准双向口模式
        P5M0 = 0x00; P5M1 = 0x00;         //设置 P5 口为准双向口模式
        P6M0 = 0x00; P6M1 = 0x00;         //设置 P6 口为准双向口模式
        P7M0 = 0x00; P7M1 = 0x00;         //设置 P7 口为准双向口模式

        uart1_txflag = 0;                        //初始化用户标志位
        uart1_rxflag = 0;                        //初始化用户标志位
        uart2_txflag = 0;                        //初始化用户标志位
        uart2_rxflag = 0;                        //初始化用户标志位
        uart3_txflag = 0;                        //初始化用户标志位
        uart3_rxflag = 0;                        //初始化用户标志位
        uart4_txflag = 0;                        //初始化用户标志位
        uart4_rxflag = 0;                        //初始化用户标志位

        Uart1_Init();                                //调用UART1初始化函数
        Uart2_Init();                                //调用UART2初始化函数
        Uart3_Init();                                //调用UART3初始化函数
        Uart4_Init();                                //调用UART4初始化函数

        EA = 1;                                                //总中断允许位打开
        P40 = 0;                                         //打开LED灯供电
        while(1)                                         //主循环中查询需要处理的各种事件
        {
                /*  本演示程序中,主循环查询各中断有无需要继续处理的事件的次序,
                依次是 UART/UART2/UART3/UART4, 用户可以自己根据实际情况,
                调整查询各中断有无需要继续处理的事件的优先次序  */

                if(uart1_txflag)                //主循环中查询,UART1是否已产生发送中断,是否有需要处理的UART1发送事件
                {
                        uart1_txflag = 0;        //清0,UART1发送事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart1_rxflag)                //主循环中查询,UART1是否已产生接收中断,是否有需要处理的UART1接收事件
                {
                        uart1_rxflag = 0;        //清0,UART1接收事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart2_txflag)                //主循环中查询,UART2是否已产生发送中断,是否有需要处理的UART2发送事件
                {
                        uart2_txflag = 0;        //清0,UART2发送事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart2_rxflag)                //主循环中查询,UART2是否已产生接收中断,是否有需要处理的UART2接收事件
                {
                        uart2_rxflag = 0;        //清0,UART2接收事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart3_txflag)                //主循环中查询,UART3是否已产生发送中断,是否有需要处理的UART3发送事件
                {
                        uart3_txflag = 0;        //清0,UART3发送事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart3_rxflag)                //主循环中查询,UART3是否已产生接收中断,是否有需要处理的UART3接收事件
                {
                        uart3_rxflag = 0;        //清0,UART3接收事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart4_txflag)                //主循环中查询,UART4是否已产生发送中断,是否有需要处理的UART4发送事件
                {
                        uart4_txflag = 0;        //清0,UART4发送事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }

                if(uart4_rxflag)                //主循环中查询,UART4是否已产生接收中断,是否有需要处理的UART4接收事件
                {
                        uart4_rxflag = 0;        //清0,UART4接收事件位变量标志
                        _nop_();                        //用户在此添加需要处理的事件
                        _nop_();
                }
        }
}


void Uart1_Isr(void) interrupt UART1_VECTOR
{
        if (TI)                                                //检测串口1发送中断
        {
                TI = 0;                                        //清除串口1发送中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart1_txflag = 1;                // uart1_txflag置1是通知主循环处理部分串口1发送中断事件不需要特急处理的任务
                                                                //置1,记录UART1已产生发送中断,供主循环查询判断有无需处理的UART1发送任务
        }
        if (RI)                                                //检测串口1接收中断
        {
                RI = 0;                                        //清除串口1接收中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart1_rxflag = 1;                // uart1_rxflag置1是通知主循环处理部分串口1接收中断事件不需要特急处理的任务
                                                                //置1,记录UART1已产生接收中断,供主循环查询判断有无需处理的UART1接收任务
        }
}
//UART1中断服务程序,UART1_VECTOR在AI8051U.H头文件中已宏定义为4

void Uart2_Isr(void) interrupt UART2_VECTOR
{
        if (S2CON & 0x02)        //检测串口2发送中断
        {
                S2CON &= ~0x02;        //清除串口2发送中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart2_txflag = 1;                // uart2_txflag置1是通知主循环处理部分串口2发送中断事件不需要特急处理的任务
                                                                //置1,记录UART2已产生发送中断,供主循环查询判断有无需处理的UART2发送任务
        }
        if (S2CON & 0x01)        //检测串口2接收中断
        {
                S2CON &= ~0x01;        //清除串口2接收中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart2_rxflag = 1;                // uart2_rxflag置1是通知主循环处理部分串口2接收中断事件不需要特急处理的任务
                                                                //置1,记录UART2已产生接收中断,供主循环查询判断有无需处理的UART2接收任务
        }
}
//UART2中断服务程序,UART2_VECTOR在AI8051U.H头文件中已宏定义为8

void Uart3_Isr(void) interrupt UART3_VECTOR
{
        if (S3CON & 0x02)        //检测串口3发送中断
        {
                S3CON &= ~0x02;        //清除串口3发送中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart3_txflag = 1;                // uart3_txflag置1是通知主循环处理部分串口3发送中断事件不需要特急处理的任务
                                                                //置1,记录UART3已产生发送中断,供主循环查询判断有无需处理的UART3发送任务
        }
        if (S3CON & 0x01)        //检测串口3接收中断
        {
                S3CON &= ~0x01;        //清除串口3接收中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart3_rxflag = 1;                // uart3_rxflag置1是通知主循环处理部分串口3接收中断事件不需要特急处理的任务
                                                                //置1,记录UART3已产生接收中断,供主循环查询判断有无需处理的UART3接收任务
        }
}
//UART3中断服务程序,UART3_VECTOR在AI8051U.H头文件中已宏定义为17

void Uart4_Isr(void) interrupt UART4_VECTOR
{
        if (S4CON & 0x02)        //检测串口4发送中断
        {
                S4CON &= ~0x02;        //清除串口4发送中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart4_txflag = 1;                // uart4_txflag置1是通知主循环处理部分串口4发送中断事件不需要特急处理的任务
                                                                //置1,记录UART4已产生发送中断,供主循环查询判断有无需处理的UART4发送任务
        }
        if (S4CON & 0x01)        //检测串口4接收中断
        {
                S4CON &= ~0x01;        //清除串口4接收中断请求位
                _nop_();                                //特急处理
                //以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
                //但时间不要太长,否则会影响其他中断事件的实时响应速度
                uart4_rxflag = 1;                // uart4_rxflag置1是通知主循环处理部分串口4接收中断事件不需要特急处理的任务
                                                                //置1,记录UART4已产生接收中断,供主循环查询判断有无需处理的UART4接收任务
        }
}
//UART4中断服务程序,UART4_VECTOR在AI8051U.H头文件中已宏定义为18




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 09:37 | 显示全部楼层
void main (void)
{
      //  EAXFR = 1;                                        //允许访问扩展的特殊寄存器,XFR
      //  WTST = 0;                                        //设置取程序代码等待时间,赋值为0表示不等待,程序以最快速度运行
      //  CKCON = 0;                                        //设置访问片内的xdata速度,赋值为0表示用最快速度访问,不增加额外的等待时间




// STC15W4K32S4系列,上面3句 不适用
// 加上下面这句
    P_SW2 |= 0x80;                              //使能XFR访问
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 09:43 | 显示全部楼层

    P_SW2 |= 0x80;                              //使能XFR访问

截图202506300942394467.jpg


截图202506300943179216.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 09:50 | 显示全部楼层
STC15W4K32三系列,您将程序改成 30MHz 以下跑比较合理
截图202506300952578602.jpg

截图202506300953473541.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 09:55 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17280
发表于 昨天 10:02 | 显示全部楼层
截图202506301002192315.jpg


#ifndef __STC15_H__
#define __STC15_H__

/////////////////////////////////////////////////

//包含本头文件后,不用另外再包含"REG51.H"

#include "stdio.h"
#include "intrins.h"

/////////////////////////////////////////////////

sfr         P0          =           0x80;
    sbit    P00         =           P0^0;
    sbit    P01         =           P0^1;
    sbit    P02         =           P0^2;
    sbit    P03         =           P0^3;
    sbit    P04         =           P0^4;
    sbit    P05         =           P0^5;
    sbit    P06         =           P0^6;
    sbit    P07         =           P0^7;

sfr         SP          =           0x81;
sfr         DPL         =           0x82;
sfr         DPH         =           0x83;
sfr         S4CON       =           0x84;
sfr         S4BUF       =           0x85;
sfr         PCON        =           0x87;

sfr         TCON        =           0x88;
    sbit    TF1         =           TCON^7;
    sbit    TR1         =           TCON^6;
    sbit    TF0         =           TCON^5;
    sbit    TR0         =           TCON^4;
    sbit    IE1         =           TCON^3;
    sbit    IT1         =           TCON^2;
    sbit    IE0         =           TCON^1;
    sbit    IT0         =           TCON^0;

sfr         TMOD        =           0x89;
sfr         TL0         =           0x8A;
sfr         TL1         =           0x8B;
sfr         TH0         =           0x8C;
sfr         TH1         =           0x8D;
sfr         AUXR        =           0x8E;
sfr         INT_CLKO    =           0x8F;

sfr         P1          =           0x90;
    sbit    P10         =           P1^0;
    sbit    P11         =           P1^1;
    sbit    P12         =           P1^2;
    sbit    P13         =           P1^3;
    sbit    P14         =           P1^4;
    sbit    P15         =           P1^5;
    sbit    P16         =           P1^6;
    sbit    P17         =           P1^7;

sfr         P1M1        =           0x91;
sfr         P1M0        =           0x92;
sfr         P0M1        =           0x93;
sfr         P0M0        =           0x94;
sfr         P2M1        =           0x95;
sfr         P2M0        =           0x96;
sfr         CLK_DIV     =           0x97;

sfr         SCON        =           0x98;
    sbit    SM0         =           SCON^7;
    sbit    SM1         =           SCON^6;
    sbit    SM2         =           SCON^5;
    sbit    REN         =           SCON^4;
    sbit    TB8         =           SCON^3;
    sbit    RB8         =           SCON^2;
    sbit    TI          =           SCON^1;
    sbit    RI          =           SCON^0;

sfr         SBUF        =           0x99;
sfr         S2CON       =           0x9A;
sfr         S2BUF       =           0x9B;
sfr         P1ASF       =           0x9D;

sfr         P2          =           0xA0;
    sbit    P20         =           P2^0;
    sbit    P21         =           P2^1;
    sbit    P22         =           P2^2;
    sbit    P23         =           P2^3;
    sbit    P24         =           P2^4;
    sbit    P25         =           P2^5;
    sbit    P26         =           P2^6;
    sbit    P27         =           P2^7;

sfr         BUS_SPEED   =           0xA1;
sfr         AUXR1       =           0xA2;
sfr         P_SW1       =           0xA2;

sfr         IE          =           0xA8;
    sbit    EA          =           IE^7;
    sbit    ELVD        =           IE^6;
    sbit    EADC        =           IE^5;
    sbit    ES          =           IE^4;
    sbit    ET1         =           IE^3;
    sbit    EX1         =           IE^2;
    sbit    ET0         =           IE^1;
    sbit    EX0         =           IE^0;

sfr         SADDR       =           0xA9;
sfr         WKTCL       =           0xAA;
sfr         WKTCH       =           0xAB;
sfr         S3CON       =           0xAC;
sfr         S3BUF       =           0xAD;
sfr         IE2         =           0xAF;

sfr         P3          =           0xB0;
    sbit    P30         =           P3^0;
    sbit    P31         =           P3^1;
    sbit    P32         =           P3^2;
    sbit    P33         =           P3^3;
    sbit    P34         =           P3^4;
    sbit    P35         =           P3^5;
    sbit    P36         =           P3^6;
    sbit    P37         =           P3^7;

    sbit    RD          =           P3^7;
    sbit    WR          =           P3^6;
    sbit    T1          =           P3^5;
    sbit    T0          =           P3^4;
    sbit    INT1        =           P3^3;
    sbit    INT0        =           P3^2;
    sbit    TXD         =           P3^1;
    sbit    RXD         =           P3^0;

sfr         P3M1        =           0xB1;
sfr         P3M0        =           0xB2;
sfr         P4M1        =           0xB3;
sfr         P4M0        =           0xB4;
sfr         IP2         =           0xB5;

sfr         IP          =           0xB8;
    sbit    PPCA        =           IP^7;
    sbit    PLVD        =           IP^6;
    sbit    PADC        =           IP^5;
    sbit    PS          =           IP^4;
    sbit    PT1         =           IP^3;
    sbit    PX1         =           IP^2;
    sbit    PT0         =           IP^1;
    sbit    PX0         =           IP^0;

sfr         SADEN       =           0xB9;
sfr         P_SW2       =           0xBA;
sfr         ADC_CONTR   =           0xBC;
sfr         ADC_RES     =           0xBD;
sfr         ADC_RESL    =           0xBE;

sfr         P4          =           0xC0;
    sbit    P40         =           P4^0;
    sbit    P41         =           P4^1;
    sbit    P42         =           P4^2;
    sbit    P43         =           P4^3;
    sbit    P44         =           P4^4;
    sbit    P45         =           P4^5;
    sbit    P46         =           P4^6;
    sbit    P47         =           P4^7;

sfr         WDT_CONTR   =           0xC1;
sfr         IAP_DATA    =           0xC2;
sfr         IAP_ADDRH   =           0xC3;
sfr         IAP_ADDRL   =           0xC4;
sfr         IAP_CMD     =           0xC5;
sfr         IAP_TRIG    =           0xC6;
sfr         IAP_CONTR   =           0xC7;

sfr         P5          =           0xC8;
    sbit    P50         =           P5^0;
    sbit    P51         =           P5^1;
    sbit    P52         =           P5^2;
    sbit    P53         =           P5^3;
    sbit    P54         =           P5^4;
    sbit    P55         =           P5^5;
    sbit    P56         =           P5^6;
    sbit    P57         =           P5^7;

sfr         P5M1        =           0xC9;
sfr         P5M0        =           0xCA;
sfr         P6M1        =           0xCB;
sfr         P6M0        =           0xCC;
sfr         SPSTAT      =           0xCD;
sfr         SPCTL       =           0xCE;
sfr         SPDAT       =           0xCF;

sfr         PSW         =           0xD0;
    sbit    CY          =           PSW^7;
    sbit    AC          =           PSW^6;
    sbit    F0          =           PSW^5;
    sbit    RS1         =           PSW^4;
    sbit    RS0         =           PSW^3;
    sbit    OV          =           PSW^2;
    sbit    F1          =           PSW^1;
    sbit    P           =           PSW^0;

sfr         T4T3M       =           0xD1;
sfr         T4H         =           0xD2;
sfr         T4L         =           0xD3;
sfr         T3H         =           0xD4;
sfr         T3L         =           0xD5;
sfr         T2H         =           0xD6;
sfr         T2L         =           0xD7;

sfr         T3T4M       =           0xD1;
sfr         TH4         =           0xD2;
sfr         TL4         =           0xD3;
sfr         TH3         =           0xD4;
sfr         TL3         =           0xD5;
sfr         TH2         =           0xD6;
sfr         TL2         =           0xD7;

sfr         CCON        =           0xD8;
    sbit    CF          =           CCON^7;
    sbit    CR          =           CCON^6;
    sbit    CCF2        =           CCON^2;
    sbit    CCF1        =           CCON^1;
    sbit    CCF0        =           CCON^0;

sfr         CMOD        =           0xD9;
sfr         CCAPM0      =           0xDA;
sfr         CCAPM1      =           0xDB;
sfr         CCAPM2      =           0xDC;

sfr         ACC         =           0xE0;
    sbit    ACC0        =           ACC^0;
    sbit    ACC1        =           ACC^1;
    sbit    ACC2        =           ACC^2;
    sbit    ACC3        =           ACC^3;
    sbit    ACC4        =           ACC^4;
    sbit    ACC5        =           ACC^5;
    sbit    ACC6        =           ACC^6;
    sbit    ACC7        =           ACC^7;

sfr         P7M1        =           0xE1;
sfr         P7M0        =           0xE2;
sfr         CMPCR1      =           0xE6;
sfr         CMPCR2      =           0xE7;

sfr         P6          =           0xE8;
    sbit    P60         =           P6^0;
    sbit    P61         =           P6^1;
    sbit    P62         =           P6^2;
    sbit    P63         =           P6^3;
    sbit    P64         =           P6^4;
    sbit    P65         =           P6^5;
    sbit    P66         =           P6^6;
    sbit    P67         =           P6^7;

sfr         CL          =           0xE9;
sfr         CCAP0L      =           0xEA;
sfr         CCAP1L      =           0xEB;
sfr         CCAP2L      =           0xEC;

sfr         B           =           0xF0;
    sbit    B0          =           B^0;
    sbit    B1          =           B^1;
    sbit    B2          =           B^2;
    sbit    B3          =           B^3;
    sbit    B4          =           B^4;
    sbit    B5          =           B^5;
    sbit    B6          =           B^6;
    sbit    B7          =           B^7;

sfr         PWMCFG      =           0xF1;
sfr         PCA_PWM0    =           0xF2;
sfr         PCA_PWM1    =           0xF3;
sfr         PCA_PWM2    =           0xF4;
sfr         PWMCR       =           0xF5;
sfr         PWMIF       =           0xF6;
sfr         PWMFDCR     =           0xF7;

sfr         P7          =           0xF8;
    sbit    P70         =           P7^0;
    sbit    P71         =           P7^1;
    sbit    P72         =           P7^2;
    sbit    P73         =           P7^3;
    sbit    P74         =           P7^4;
    sbit    P75         =           P7^5;
    sbit    P76         =           P7^6;
    sbit    P77         =           P7^7;

sfr         CH          =           0xF9;
sfr         CCAP0H      =           0xFA;
sfr         CCAP1H      =           0xFB;
sfr         CCAP2H      =           0xFC;

//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写

#define     PWMC                (*(unsigned int  volatile xdata *)0xfff0)
#define     PWMCH               (*(unsigned char volatile xdata *)0xfff0)
#define     PWMCL               (*(unsigned char volatile xdata *)0xfff1)
#define     PWMCKS              (*(unsigned char volatile xdata *)0xfff2)
#define     PWM2T1              (*(unsigned int  volatile xdata *)0xff00)
#define     PWM2T1H             (*(unsigned char volatile xdata *)0xff00)
#define     PWM2T1L             (*(unsigned char volatile xdata *)0xff01)
#define     PWM2T2              (*(unsigned int  volatile xdata *)0xff02)
#define     PWM2T2H             (*(unsigned char volatile xdata *)0xff02)
#define     PWM2T2L             (*(unsigned char volatile xdata *)0xff03)
#define     PWM2CR              (*(unsigned char volatile xdata *)0xff04)
#define     PWM3T1              (*(unsigned int  volatile xdata *)0xff10)
#define     PWM3T1H             (*(unsigned char volatile xdata *)0xff10)
#define     PWM3T1L             (*(unsigned char volatile xdata *)0xff11)
#define     PWM3T2              (*(unsigned int  volatile xdata *)0xff12)
#define     PWM3T2H             (*(unsigned char volatile xdata *)0xff12)
#define     PWM3T2L             (*(unsigned char volatile xdata *)0xff13)
#define     PWM3CR              (*(unsigned char volatile xdata *)0xff14)
#define     PWM4T1              (*(unsigned int  volatile xdata *)0xff20)
#define     PWM4T1H             (*(unsigned char volatile xdata *)0xff20)
#define     PWM4T1L             (*(unsigned char volatile xdata *)0xff21)
#define     PWM4T2              (*(unsigned int  volatile xdata *)0xff22)
#define     PWM4T2H             (*(unsigned char volatile xdata *)0xff22)
#define     PWM4T2L             (*(unsigned char volatile xdata *)0xff23)
#define     PWM4CR              (*(unsigned char volatile xdata *)0xff24)
#define     PWM5T1              (*(unsigned int  volatile xdata *)0xff30)
#define     PWM5T1H             (*(unsigned char volatile xdata *)0xff30)
#define     PWM5T1L             (*(unsigned char volatile xdata *)0xff31)
#define     PWM5T2              (*(unsigned int  volatile xdata *)0xff32)
#define     PWM5T2H             (*(unsigned char volatile xdata *)0xff32)
#define     PWM5T2L             (*(unsigned char volatile xdata *)0xff33)
#define     PWM5CR              (*(unsigned char volatile xdata *)0xff34)
#define     PWM6T1              (*(unsigned int  volatile xdata *)0xff40)
#define     PWM6T1H             (*(unsigned char volatile xdata *)0xff40)
#define     PWM6T1L             (*(unsigned char volatile xdata *)0xff41)
#define     PWM6T2              (*(unsigned int  volatile xdata *)0xff42)
#define     PWM6T2H             (*(unsigned char volatile xdata *)0xff42)
#define     PWM6T2L             (*(unsigned char volatile xdata *)0xff43)
#define     PWM6CR              (*(unsigned char volatile xdata *)0xff44)
#define     PWM7T1              (*(unsigned int  volatile xdata *)0xff50)
#define     PWM7T1H             (*(unsigned char volatile xdata *)0xff50)
#define     PWM7T1L             (*(unsigned char volatile xdata *)0xff51)
#define     PWM7T2              (*(unsigned int  volatile xdata *)0xff52)
#define     PWM7T2H             (*(unsigned char volatile xdata *)0xff52)
#define     PWM7T2L             (*(unsigned char volatile xdata *)0xff53)
#define     PWM7CR              (*(unsigned char volatile xdata *)0xff54)

/////////////////////////////////////////////////

#endif


回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-1 09:04 , Processed in 0.139199 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表