打印
[其它应用]

系统时钟及IO口输出操作

[复制链接]
3950|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-5-22 09:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、芯片介绍
SH79F9476,是一款基于8051指令流水线结构的8位单片机,保留了标准8051芯片的大部分特性,如256字节RAM、3路UART、外部中断0、2、3;另外SH79F9476还集成了4096字节RAM、64K程序存储Flash块。

1. 规格
FlashROM:64K
RAM: 内部256字节,外部4096字节,LED RAM32字节,touchkey RAM 84字节;
类EEPROM:最大4096字节
工作电压:2.7V-5.5V
振荡:晶振频率:32.768K,内部RC振荡器:24MHz/128K
2. 资源
32/26/18个CMOS 双向I/O管脚
I/O内建上拉电阻(32K)
8个大电流驱动I/O(sink)口
20路触摸按键输入
4个16位定时/计数器(T2,T3,T4,T5)
1个16位PCA0,含2个比较/捕捉单元
2路12位PWM定时器
TWI接口
内建数字逻辑可配置模块 LCM
3路增加型 UART
9通道12位模数转换器
LED驱动器
内建的低电压复位功能
内建CRC校验模块
13档电平可选的低电压检测模块
支持单线仿真和烧写
看门狗定时器WDT
预热计数器
3. 中断源:
Timer2,3,4,5,PCA0
外部中断0,2,3
外部中断4:8输入
ADC
EUART
触摸按键
PWM
SCM
CRC
TWI
LPD
LED
4. 方框图



5. 封装
LQFP32
SOP28
SOP20
(1)32脚LQFP封装



(2)28脚SOP封装



(3)20脚SOP封装



二、开发环境搭建
1. 安装keil
过程略。

2. 安装中颖keil插件包
到官网:
https://www.sinowealth.com/seach?type_id=68&a_v_type=1
下载Keil 插件集成包:



安装时需要选择Keil目录 。

3. 调试工具
本系列文章调试工具是中颖 SinoLink,使用SWE方式调试。



4. 芯片调试引脚说明
调试器引脚 :

第一排 第6引脚(白色倒三角指示位置): VCC
第二排 第1引脚 : GND
第二排 第2引脚 : SWE引脚



芯片SWE引脚可在封装引脚图上找到:




三、系统时钟
1. 振荡器类型
32.768k
内部24M/128K rc振荡器 OSCXCLK
外部时钟源
振荡器的类型选择由代码选项OP_OSC决定 。

下面 OSCCLK指的是从4个可选振荡器中选中的那个振荡器时钟。

SH79F9476内置系统时钟分频器。
SH79F9476有2个振荡器引脚(XTAL1、XTAL2),可从外部振荡器中产生一种时钟。
系统框图如下:



当代码选项 OP_OSC 为 0011 , 1010 时, OSCXCLK 为内建 24MHzRC ;
2. 系统时钟控制寄存器



其中:

32k_SPDUP:32.768kHZ晶振加速位
0: 32.786kHz常规模式,由软件清0 ;
1: 32.768kHz振荡器加速模式,由软件或硬件置1.
系统复位时,这一位自由由硬件置1.

关闭加速模式可以节电,当代码选项: OP_OSC为1010时此控制位才有效。

CLKS[1:0] 系统时钟频率分频器



如果选择 32.768kHz振荡器为OSCSCLK,此控制位无效。

HFON OSCXCLK开关控制寄存器
0:关闭OSCXCLK
1:打开OSCXCLK
代码选项OP_OSC为0011、1010时(选择32.768kHz晶振或128K内部RC振荡器)此控制位有效。
FS 频率选择位
0:选择32.768kHz / 128kHz为OSCSCLK
1: 选择OSCXCLK为OSCSCLK
代码选项OP_OSC为0011、1010时(选择32.768kHz晶振或128K内部RC振荡器)此控制位有效。
3. 设置系统时钟
官方demo给了两种个设置频率的示例,

(1)设置高频

void SetClk()
{
          // 00001000
          CLKCON =0x08;
          Delay();
          // 00000100
          CLKCON|=0x04;
}



(2)设置低频
void SetClk(){
        // 11111011
          CLKCON &=0xFB;          //设置FS为0,选择OSC1CLK为系统时钟
          // 选择晶振预热
          _nop_();
          // 11110111
          CLKCON &=0xF7;      //关闭高频时钟OSC2CLK
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          // 10011111
          CLKCON &=0x9F;          //关闭分频  Fsys=Fosc
}


示例代码中使用宏来选择设置的频率。

4. 实验代码
(1)sysclk_define.h
/************************* for SH79F9476*************************************************************************/
//#define        HIGH_FREQUENCE
#define LOW_FREQUENCE
//#define  Half_VDD
/*****************************************************************************************************************/



(2)main.c

#include "SH79F9476.h"
#include "api_ext.h"
#include "cpu.h"
#include "sysclk_define.h"

void Sysclk_Test()
{
  P1CR |=0x01;    //配置Port P1端口的bit0为输出模式
  P1_0 = 0;       //控制P1_0pin输出低电平
  #ifdef Half_VDD
    P0V0=0x0f;
  #endif
  SetClk();
  while(1)              //控制P0_0pin翻转测试系统clk
  {
    P1_0=~P1_0;
  }
}

void main()
{
  Sysclk_Test();
        while(1);
}



5. 编译运行
1. 高频运行
(1)sysclk_define.h 里设置:
/************************* for SH79F9476*************************************************************************/
#define        HIGH_FREQUENCE
//#define LOW_FREQUENCE
//#define  Half_VDD
/*****************************************************************************************************************/


(2)keil设置
在Options for Target里的 Utilities,点击: Settings。



如下图所示,选择OSC1为内部24MRC,OSC2禁用。



编译、烧写、运行程序,在P1.0引脚使用示波器观察输出频率。



高频:实测波形 1.72M左右

2.频率计算公式
由于 C 程序中 IO 翻转一次需要 7 个时钟周期,所以 IO 翻转产生的方波频率应为:
f = F s y s / ( 7 ∗ 2 ) f=F_{sys}/(7*2)f=F
sys

/(7∗2),Fsys 为当前选中的低频或者高频时钟。
上面的 24M/(7*2),结果1.72M左右。

3. 低频运行
选择频率:
修改频率预定义宏:

// #define        HIGH_FREQUENCE
#define LOW_FREQUENCE


类似的,选择OP_OSC为:





频率计算: 128K/(2*7)=9.14,实测频率 9.09K左右。

四、I/O 端口
为便于测试,上面代码对P1.0 IO口进行操作,这里简要说明 ,后续章节再进行详细介绍。

PxCR 是控制端口输入/输出的寄存器,代码中:

  P1CR |=0x01;    //配置Port P1端口的bit0为输出模式


用来设置端口为输出状态,这里的P1.0即下图所示引脚:



代码:

  P1_0 = 0;       //控制P1_0pin输出低电平


用来控制端口输出低电平。

本文代码开源在:
https://gitee.com/xundh/learn-sinowealth-51
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xundh/article/details/137335715

使用特权

评论回复
沙发
菜鸟的第一步| | 2024-5-22 10:16 | 只看该作者
8位单片机这么大的FLASH和RAM啊,好爽

使用特权

评论回复
板凳
勇敢的大白菜| | 2024-5-23 10:23 | 只看该作者
这个仿真器可以调试所有的芯片吗?

使用特权

评论回复
地板
嵌入小菜菜| | 2024-5-23 10:37 | 只看该作者
这个仿真器是可以调试大部分芯片的

使用特权

评论回复
5
自己造声卡| | 2024-5-24 10:20 | 只看该作者
波形上的毛刺是怎么去除的?

使用特权

评论回复
6
看别人照片| | 2024-5-24 10:42 | 只看该作者
这样看来中颖单片机还是很强大的

使用特权

评论回复
7
亚瑟| | 2024-5-24 21:25 | 只看该作者
1T的还是12T的啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝