发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[通用8051核FLASH系列]

HC89S001P试用记录

[复制链接]
1294|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianlv|  楼主 | 2019-3-23 18:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HC, PWM, ADC, AD, dc
本帖最后由 芯圣电子官方QQ 于 2023-7-25 14:22 编辑

有幸参加HC89S001P试用活动,按资料试验,还是比较容易上手的。论坛的支持反应很快,稍微出点状况,就会有资料更新,前两天连厂家的网站资料都更新了,芯圣的推广支持力度还蛮到位的。
收到的试用样品:

最小系统板跑了几个例程,没有遇到什么问题,论坛里都是试用经验,就不说了。
关于HC89S001P的试用,参考数据手册修改例程中部分寄存器数据,编写主程序后直接可以运行(Keil中选HC89S003P,ISP写入时选HC89S001P)。
用面包板搭的小系统以及两个小程序如下:
使用的零件:
   

电路图:
  

试验效果:


程序部分1:(使用ADC和PWM功能软开关试验)
/**
*   ************************************************************************************
*                                                                上海芯圣电子股份有限公司
*                                                                    www.holychip.cn
*        ************************************************************************************
*        @Examle Version                V1.0.3.0
*        @demo         Version                V1.0.3.0
*        @date                                2018.6.1
*        ************************************************************************************
*                                                                        模块性能介绍
*        1、MCU拥有一个单路8位PWM3模块,PWM3提供周期溢出中断
*        2、PWM3周期:[PWM3P]*PWM3工作时钟源周期
*        3、PWM3占空比:[PWM3D]*PWM3工作时钟源周期
*        ************************************************************************************
*                                                                         应用注意事项
*        1、关闭PWM3模块时,PWM计数停止,输出立即关闭。再打开PWM3模块时,PWM计数器都重新从1开
*           始计数,输出受PWM3OEN控制
*        2、PWM3允许输出,必须在PWM3EN置1下才有效,否则为PWM3输出关闭状态(输出时对应端口必须
*           设为输出模式);即使都禁止输出,只要相关位被使能,PWM3都可以溢出中断,即此时PWM3
*           可以作为定时器/计数器使用,此控制位修改立即生效
*        ************************************************************************************
*                                                                         客户服务
*        感谢您使用我们的单片机,若发现错误或对函数的使用存在疑问。请添加上海芯圣电子官方QQ群
*        ****************************技术支持群:201030494***********************************
*   ************************************************************************************
**/

#define ALLOCATE_EXTERN
#include "HC89S003F4.h"
                        
//unsigned int gui_AdcValue = 0;                        //用于存放ADC的值
/***************************************************************************************
  * @实现效果        P22口输出频率为15.69KHz,占空比为34%的方波
***************************************************************************************/


//延时函数
void Delay_2us(unsigned int fui_i)
{
        while(fui_i--);        
}

/*void DelayMs(u16 ms)
{
        u16 j;
        for(; ms>0; ms--)
                for(j=1596; j>0; j--);
}*/
void main()
{
/************************************系统初始化****************************************/
        WDTCCR = 0x00;                                                //关闭看门狗
                                                //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                //Fosc 1分频得到Fcpu,Fcpu=16MHz
/************************************PWM3初始化****************************************/
        P2M0 = P2M0&0x0F|0x30;                                //P21设置为模拟输入
        
        P0M0 = P0M0&0xF0|0x08;                                //P00设置为推挽输出
        P0M1 = P0M1&0x0F|0x80;                                //P03设置为推挽输出
        P0M2 = P0M2&0xF0|0x08;                          //P04设置为推挽输出
        PWM0_MAP = 0x03;                                                        //PWM0通道映射P03口
        PWM01_MAP = 0x04;                                                        //PWM01通道映射P04口
        PWM1_MAP = 0x00;                                                        //PWM1通道映射P00口

        PWM0C = 0x01;                                                                        //PWM0高有效,PWM01高有效,时钟8分频
        PWM1C = 0x01;                                                                        //PWM1高有效,PWM01高有效,时钟8分频
        //周期计算         = 0x03ff / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
        //                        = 0x03ff / (16000000 / 8)                        
        //                         = 1023   /2000000
        //                        = 511.5us                                   约1.955kHz
        PWM0PL = 0xFF;                                                                //周期低8位设置为0xFF
        PWM1PL = 0xFF;

        PWM0EN = 0x0F;                                                                //使能PWM0,工作于独立模式
        PWM1EN = 0x0B;                                                                //使能PWM1,工作于独立模式
        
        PWM0DL = 0xFF;                                                                //初始状态,灯全部熄灭。
        PWM0DTL = 0xFF;
        PWM1DL = 0xFF;

        ADCC0 = 0x80;                                                //打开ADC转换电源
        Delay_2us(10);                                                //延时20us,确保ADC系统稳定
        ADCC1 = 0x09;                                                //选择外部通道9
        ADCC2 = 0x4D;                                                //转换结果12位数据,数据右对齐,ADC时钟16分频

        while(1)
        {
                ADCC0 |= 0x40;                                        //启动ADC转换
                while(!(ADCC0&0x20));                        //等待ADC转换结束
                ADCC0 &=~ 0x20;                                        //清除标志位

                if(ADCR/0x200==0)                                      //不发光
                {
                        PWM0DL = 0xff;                                
                        PWM0DTL = 0xff;                                
                        PWM1DL = 0xff;                                
                }
                if(ADCR/0x200==1)                                     //红色
                {
                        PWM0DL = 0x00;                                
                        PWM0DTL = 0xff;                                
                        PWM1DL = 0xff;                                
                }
                if(ADCR/0x200==2)                                     //橙色
                {
                        PWM0DL = 0x00;                                
                        PWM0DTL = 0xa0;                                
                        PWM1DL = 0xff;                                
                }
                if(ADCR/0x200==3)                                     //绿色
                {
                        PWM0DL = 0xff;                                
                        PWM0DTL = 0x00;                                
                        PWM1DL = 0xff;                                
                }
                if(ADCR/0x200==4)                                     //青色
                {
                        PWM0DL = 0xff;                                
                        PWM0DTL = 0x00;                                
                        PWM1DL = 0x00;                                
                }
                if(ADCR/0x200==5)                                     //蓝色
                {
                        PWM0DL = 0xff;                                
                        PWM0DTL = 0xff;                                
                        PWM1DL = 0x00;                                
                }
                if(ADCR/0x200==6)                                     //紫色
                {
                        PWM0DL = 0x00;                                
                        PWM0DTL = 0xff;                                
                        PWM1DL = 0xc0;                                
                }
                if(ADCR/0x200==7)                                     //全色
                {
                        PWM0DL = 0x00;                                
                        PWM0DTL = 0x00;                                
                        PWM1DL = 0x00;                                
                }
        }
}







程序部分2:(使用PWM功能光谱灯试验):

/**
*   ************************************************************************************
*                                                                上海芯圣电子股份有限公司
*                                                                    www.holychip.cn
*        ************************************************************************************
*        @Examle Version                V1.0.3.0
*        @demo         Version                V1.0.3.0
*        @date                                2018.6.1
*        ************************************************************************************
*                                                                        模块性能介绍
*        1、MCU拥有一个单路8位PWM3模块,PWM3提供周期溢出中断
*        2、PWM3周期:[PWM3P]*PWM3工作时钟源周期
*        3、PWM3占空比:[PWM3D]*PWM3工作时钟源周期
*        ************************************************************************************
*                                                                         应用注意事项
*        1、关闭PWM3模块时,PWM计数停止,输出立即关闭。再打开PWM3模块时,PWM计数器都重新从1开
*           始计数,输出受PWM3OEN控制
*        2、PWM3允许输出,必须在PWM3EN置1下才有效,否则为PWM3输出关闭状态(输出时对应端口必须
*           设为输出模式);即使都禁止输出,只要相关位被使能,PWM3都可以溢出中断,即此时PWM3
*           可以作为定时器/计数器使用,此控制位修改立即生效
*        ************************************************************************************
*                                                                         客户服务
*        感谢您使用我们的单片机,若发现错误或对函数的使用存在疑问。请添加上海芯圣电子官方QQ群
*        ****************************技术支持群:201030494***********************************
*   ************************************************************************************
**/

#define ALLOCATE_EXTERN
#include "HC89S003F4.h"

/***************************************************************************************
  * @实现效果        P22口输出频率为15.69KHz,占空比为34%的方波
***************************************************************************************/

void DelayMs(u16 ms)
{
        u16 j;
        for(; ms>0; ms--)
                for(j=1596; j>0; j--);
}
void main()
{
/************************************系统初始化****************************************/
        WDTCCR = 0x00;                                                //关闭看门狗
                                                //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                //Fosc 1分频得到Fcpu,Fcpu=16MHz
/************************************PWM3初始化****************************************/
        P0M0 = P0M0&0xF0|0x08;                                //P00设置为推挽输出
        P0M1 = P0M1&0x0F|0x80;                                //P03设置为推挽输出
  P0M2 = P0M2&0xF0|0x08;        //P04设置为推挽输出
        PWM0_MAP = 0x03;                                                        //PWM0通道映射P03口
        PWM01_MAP = 0x04;                                                        //PWM01通道映射P04口
        PWM1_MAP = 0x00;                                                        //PWM1通道映射P00口

        PWM0C = 0x01;                                                                        //PWM0高有效,PWM01高有效,时钟8分频
        PWM1C = 0x01;                                                                        //PWM1高有效,PWM01高有效,时钟8分频
        //周期计算         = 0x03ff / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
        //                        = 0x03ff / (16000000 / 8)                        
        //                         = 1023   /2000000
        //                        = 511.5us                                   约1.955kHz
        PWM0PH = 0x00;                                                                //周期高4位设置为0x03
        PWM0PL = 0xFF;                                                                //周期低8位设置为0xFF
        PWM1PH = 0x00;
        PWM1PL = 0xFF;

        PWM0EN = 0x0F;                                                                //使能PWM0,工作于独立模式
        PWM1EN = 0x0B;                                                                //使能PWM1,工作于独立模式
        
        PWM0DH = 0x00;                                                                //初始状态,灯全部熄灭。
        PWM0DL = 0xFF;
        PWM0DTH = 0x00;
        PWM0DTL = 0xFF;
        PWM1DH = 0x00;
        PWM1DL = 0x00;

    while(1)                                     //按赤橙黄绿青蓝紫色循环
                {
                        for( PWM0DL=0xff;PWM0DL>=0x01;PWM0DL--)
                        DelayMs(3);        

                        for( PWM1DL=0x00;PWM1DL<=0xfe;PWM1DL++)
                        DelayMs(3);        

                        for( PWM0DTL=0xff;PWM0DTL>=0x01;PWM0DTL--)
                        DelayMs(3);        

                        for( PWM0DL=0x00;PWM0DL<=0xfe;PWM0DL++)
                        DelayMs(3);        

                        for( PWM1DL=0xff;PWM1DL>=0x01;PWM1DL--)
                        DelayMs(3);        

                        for( PWM0DTL=0x00;PWM0DTL<=0xfe;PWM0DTL++)
                        DelayMs(3);        

                }
}

  

使用特权

评论回复

打赏榜单

芯圣电子官方QQ 打赏了 50.00 元 2019-04-08
理由:001P试用三等奖

沙发
零三翟邢止胃| | 2019-3-25 11:22 | 只看该作者
多谢分享啊! 感谢啊!

使用特权

评论回复
板凳
zxywq| | 2020-7-8 10:43 | 只看该作者
你好,为什么我的程序下载总是显示set JTAG failed,勾选校验就是连接芯片失败。

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

61

帖子

0

粉丝