PMS150应广科技8位单片机(MCU),价格美丽,性价比高mini-c好用,适用于消费电子开发,经典PMS150C的点灯程序代码

整理编辑:逐高电子技术开发部 / 日期:2024-8-10

应广单片机价格美丽,性价比高,mini-c好用,适用于消费电子开发。但是案例demo太少了,为了方便大家能够快速入门。这
里贴出了一份经典PMS150C的点灯程序代码。不是Hello world!那种,是偏向于实际产品的那种

 


PMS150通用 OTP 系列

MC150/PMS150是一个10类型、完全静态,以OTPQ为程序存储基础的单片机。它运用RISC的架构基础使大部分执行指令周期,。
口有D部分指令需要两个指令周期。PMC150/PMS150内置1KW OTP程序内存以及60字节数据存储器:另外PMC150/PMS150还提供一个16
立的硬件计数器


不建议使用于AC 阻容降压供电或有高EFT要求之应用
工作温度范围: -20°C ~ 70°C



系统特性


1. 1KW OTP 程序储存器
2. 60 Bytes 数据储存器
3. 一个16位定时器
4. 快速唤醒功能
5. 内置高频 RC 振荡器(IHRC)
6. 内置Band-gap 硬件模块输出 1.20V 参考电压
7. 6 个IO 引脚具有10mA 电流驱动能力
8. 操作电压范围: 2.2V ~ 5.5V
9. 时钟源:内部高频震荡器,内部低频震荡器
10. 每个IO 引脚都可设定唤醒功能
11. 8 段LVR 复位设定: 4.1V, 3.6V, 3.1V, 2.8V, 2.5V, 2.2V, 2.0V, 1.8V
12. 1 个外部中断引脚
 
CPU 特性


1. 单一处理单元工作模式
2. 提供79 个有效指令
3. 1T(单周期)指令
4. 可程序设定的堆栈指针和堆栈深度
5. 数据存取支持直接和间接寻址模式,用数据存储器即可当作间接寻址模式的数据指针(index pointer)
6. IO 地址以及储存地址空间互相独立

PMS150封装图

涉及到的内容有不少,包括应广单片机PMS150C:


1.端口输入输出配置
2.Tmr16中断配置(systick),倒计时
3.按键检测,包括防抖,可以用于长按键检测
4.低功耗,睡眠配置
5.唤醒
6.系统时钟配置,系统时钟切换
7.看门狗应用
8.状态机应用


其他比如PMS152,PMS132设置也类似,希望大家喜欢!


#include "extern.h"
#define HIGH 1
#define LOW 0
#define DISABLE 0
#define ENABLE 1
#define EMPTY 0
#define FULL 1
#define ON 1
#define OFF 0
#define LED_OPEN 0
#define LED_FLASH 1
#define LED_BREATH 2
#define LED_CLOSE 3
//#define RUN_TMR 60000
/*单位 ms*/
#define RUN_TMR 15000
#define LOW_POW_TIMING_TMR 3000
BIT LED_G : PA.3;
BIT KEY_HIT : PA.4;
#define KEY_DEBOUNCE_CNT 20
#define KEY_LONG_PRESS_TIMER 1200
#define GRE_LED_FLASH {if(LED_G){LED_G=0;}else{ LED_G=1;}}
/*计数值Cinit*/
word ucFlashTmrCnt;
1
/*cinit*/
BIT ubMsFlag;
/*cinit*/
BIT ubEnLedFlash;
/*cinit*/
bit ubMod;
byte ucSysSt;
//byte ucLedPwmDt;
/*定时时间是否到了cinit*/
bit FLAG_NMS;
/*计数值cinit*/
byte count;
/*定时器初始化cinit*/
word T16COUNTER;
Eword ueLowPowAltTm;
byte ucKeyHitHigtCnt;
byte ucKeyHitLowCnt;
byte ucKeyHitSt;
byte ucKeyHitBak;
word usKeyHitLoPreCnt;
word usKeyHitLoPreCntSet;
bit ucKeyHitPreSt;
byte ucLedSt;
void UpDateLedSt(void);
/***************************************/
void TIME16_Init(void)
{
/*计数值清零*/
T16COUNTER =488;
/*ms标记reset*/
FLAG_NMS =0;
/*使能定时器*/
$ INTEN T16;
/*关中断*/
INTRQ = 0;
/*停止定时器*/
T16M.5 =0;
STT16 T16COUNTER;
/*计算方法16M/*/
$ T16M IHRC,/1,BIT11;
}
void StartLowPowTmr(void)
{
ueLowPowAltTm=RUN_TMR;
}
/*低功耗*/
void LowPow(void)
{
/*退出功能则进入低功耗*/
if((!ueLowPowAltTm) )
{
2
ubEnLedFlash=0;
GRE_LED_OFF;
wdreset;
/*IHRC ->ILRC,关看门狗*/
CLKMD=0xf4;
/*禁用IHRC*/
CLKMD.4=0;
while(1)
{
/*低功耗*/
STOPSYS;
/*有按键按下,充电和按键唤醒*/
if(KEY_HIT==0)
{
/*退出低功耗*/
break;
}
}


/*ILRC->IHRC ,
b7:5@001=IHRC/8,
b4@1=IHRC
b3@1=模式1
b2@ 1=ILRC启动
b1@ 1=看门狗开启
b0@ 0=Pa5;
模式口1;开看门狗*/
CLKMD=0b001_1_1110;
ucLedSt=1;
ucSysSt=LED_CLOSE;
StartLowPowTmr();
}
}
void UpdateLedTmr(void)
{
/*使能,闪灯*/
if(ubEnLedFlash)
{
/*1ms进行一次计数*/
ucFlashTmrCnt++;
if(ucFlashTmrCnt>250)
{
ucFlashTmrCnt=0;
/*标记*/
ubMsFlag=1;
}
}
}


/*闪灯*/
void FlashLed(void)
{
/*定时时间到*/
if(ubMsFlag)
{
/*闪灯*/
3
GRE_LED_FLASH;
ubMsFlag=0;
}
}
/*端口检测*/
void ResetKeyTmr(void)
{
if(KEY_HIT)
{
ucKeyHitHigtCnt=KEY_DEBOUNCE_CNT;
}
/*当前状态为0*/
else
{
ucKeyHitLowCnt=KEY_DEBOUNCE_CNT;
}
}


/*1ms任务函数*/
void UpDateKeyTmr(void)
{
/*重新设置计数值*/
ResetKeyTmr();
/*KeyHit高电平计数值*/
if(ucKeyHitHigtCnt)
{
ucKeyHitHigtCnt--;
if(!ucKeyHitHigtCnt)
{
/*高电平倒计时完成说明当前为低*/
ucKeyHitSt=LOW;
}
}
/*高电平计数值为0*/
else
{
usKeyHitLoPreCnt++;
/*做饱和加*/
if(usKeyHitLoPreCnt>20000)
{
usKeyHitLoPreCnt=20000;
}
if(usKeyHitLoPreCnt==usKeyHitLoPreCntSet)
{
/*10s 钟定信号*/
ucKeyHitPreSt=1;
}
}
/*KeyHit低电平计数值*/
if(ucKeyHitLowCnt)
{
ucKeyHitLowCnt--;
if(!ucKeyHitLowCnt)
{
/*低电平倒计时完成,说明当前为高*/
ucKeyHitSt=HIGH;
usKeyHitLoPreCnt=0;
4
ucKeyHitPreSt=0;
}
}
}


void MsTask(void)
{
/*按键*/
UpDateKeyTmr();
UpdateLedTmr();
FlashLed();
/*低功耗定时器*/
if(ueLowPowAltTm)
{
ueLowPowAltTm--;
}
LowPow();
}
void UpDateLedSt(void)
{
ucSysSt++;
if(ucSysSt>1)
{
ucSysSt=0;
}
switch(ucSysSt)
{
/*开闪烁*/
case 0:
ubEnLedFlash=1;
break;
/*关灯*/
case 1:
ueLowPowAltTm=LOW_POW_TIMING_TMR;
ubEnLedFlash=0;
/*关灯,关闪烁*/
GRE_LED_OFF;
/*关灯*/
break;
default:
break;
}
}


/*状态切换*/
void GetKeySt(void)
{
/*状态有变化*/
if(ucKeyHitSt!=ucKeyHitBak)
5
{


/*保存当前状态*/
ucKeyHitBak=ucKeyHitSt;
if(!ucKeyHitSt)
{
/*更新倒计时*/
StartLowPowTmr();
/*状态切换*/
UpDateLedSt();
}
}
}


/*端口状态初始化*/
void KeyAppInit(void)
{
if(KEY_HIT)
{
ucKeyHitSt=HIGH;
ucKeyHitBak=HIGH;
}
else
{
ucKeyHitSt=LOW;
ucKeyHitBak=LOW;
}
ucKeyHitHigtCnt=KEY_DEBOUNCE_CNT;
ucKeyHitLowCnt=KEY_DEBOUNCE_CNT;
usKeyHitLoPreCnt=0;
ucKeyHitPreSt=0;
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/8, IHRC=16MHz, VDD=3.0V;
$ CLKMD IHRC/8,En_IHRC,En_ILRC,En_WatchDog;
/**/
.delay 40000;
$ LED_G OUT,HIGH;
$ KEY_HIT IN,PULL;
TIME16_Init();
KeyAppInit();
ucLedSt=1;
ubMsFlag=0;
ubEnLedFlash=0;


/*长按键时间*/
usKeyHitLoPreCntSet=3000;
ucSysSt=LED_CLOSE;
engint;
while (1)
{
6
wdreset;


/*1ms定时时间到*/
if ( FLAG_NMS )
{
MsTask();


/*清除标记*/
FLAG_NMS=0;
}


/*取得按键状态*/
GetKeySt();
}
}
void Interrupt ( void )
{
pushaf;
if ( Intrq.T16 )
{
Intrq.T16 = 0;
STT16 T16COUNTER;
if ( count>0 )
{
count--;
}
else
{
count = 9;
/*1ms*/
FLAG_NMS= 1;
}
}
popaf;
}

应广单片机技术资料

  • 台湾应广单片机官网
  • 应广单片机例程
  • 应广单片机编程指南
  • 应广单片机定时器
  • 技术开发工具
  • 应广单片机IDE&仿真器
  • 应广单片机烧录器
  • 代码生成器
应广触摸单片机 PMS161 触摸功能内含一个触摸检测电路,用户可通过寄存器 ESOCR配置触摸模块电源

应广触摸单片机 PMS161 触摸功能内含一个触摸检测电路,用户可通过寄存器 ESOCR配置触摸模块电源


应广科技 PMB183 8 位 OTP 型单片机带充电,内置一个硬件充电器,此充电器为完全恒流/恒压线性充电,可用于单节锂离子电池充电管理

应广科技 PMB183 8 位 OTP 型单片机带充电,内置一个硬件充电器,此充电器为完全恒流/恒压线性充电,可用于单节锂离子电池充电管理


低功耗高效能语音控制IC,为您的设备赋予语音交互能力,应广科技语音单片机芯片打造极致语音控制体验的IC选择

低功耗高效能语音控制IC,为您的设备赋予语音交互能力,应广科技语音单片机芯片打造极致语音控制体验的IC选择


PMB180应广单片机8 位 OTP 型单片机带充电,内置一个硬件充电器。此充电器为完全恒流/恒压线性充电,可用于单节锂离子电池充电管理

PMB180应广单片机8 位 OTP 型单片机带充电,内置一个硬件充电器。此充电器为完全恒流/恒压线性充电,可用于单节锂离子电池充电管理


PMC-APN002 过电压保护应用需知,IO 输入电压高过 VDD 或低于 GND,都可能造成应广单片机损伤,或是因内部电流引发单片机不正常工作

PMC-APN002 过电压保护应用需知,IO 输入电压高过 VDD 或低于 GND,都可能造成应广单片机损伤,或是因内部电流引发单片机不正常工作


语音芯片IC_MCU单片机语音方案,使用Arduino和蓝牙DIY语音控制家庭自动化案例,用语音命令无线控制家用电器和灯光

语音芯片IC_MCU单片机语音方案,使用Arduino和蓝牙DIY语音控制家庭自动化案例,用语音命令无线控制家用电器和灯光


PMS154C单片机8位PWM计数器/比较器使用,选择 PA3 为负输入和 Vinternal R 为正输入,Vinternal R 的电压为(18/32)*VDD,AC 阻容降压供电

PMS154C单片机8位PWM计数器/比较器使用,选择 PA3 为负输入和 Vinternal R 为正输入,Vinternal R 的电压为(18/32)*VDD,AC 阻容降压供电


语音控制IC应广单片机(MCU)如何设计声控灯应用解决方案?将介绍设计过程中的关键阶段,包括组件选择、电路设计、电源、编程和测试

语音控制IC应广单片机(MCU)如何设计声控灯应用解决方案?将介绍设计过程中的关键阶段,包括组件选择、电路设计、电源、编程和测试


语音控制IC低功耗微控制器(MCU)的语音控制,什么构成了良好的语音控制解决方案,语音用户界面 (VUI) 使人类能够使用语音与机器通信

语音控制IC低功耗微控制器(MCU)的语音控制,什么构成了良好的语音控制解决方案,语音用户界面 (VUI) 使人类能够使用语音与机器通信


PFC232 应广单片机,工业级- 8 位 MTP 型单片机(FPPATM)带 12 位增强型 ADC,自于内部bandgap参考电压或0.25*VDD,89条高效的指令

PFC232 应广单片机,工业级- 8 位 MTP 型单片机(FPPATM)带 12 位增强型 ADC,自于内部bandgap参考电压或0.25*VDD,89条高效的指令


应广科技Mini-C语言开发PMS150G,Mini-C语言是台湾应广公司推出的自家单片机开发语言,兼容C语言,实现Mini C的代码产生器

应广科技Mini-C语言开发PMS150G,Mini-C语言是台湾应广公司推出的自家单片机开发语言,兼容C语言,实现Mini C的代码产生器


应广科技PMC-APN001 ADC 模拟信号源输出阻抗应用需知,所有带 ADC 单片,ADC 取样周期为 2us,信号源对于芯片内部充放电

应广科技PMC-APN001 ADC 模拟信号源输出阻抗应用需知,所有带 ADC 单片,ADC 取样周期为 2us,信号源对于芯片内部充放电


PMB183 8位OTP型应广单片机带充电应用方案,3连套11位SuLED (Super LED) PWM生成器,充电模式待机功耗57uA(VCC)

PMB183 8位OTP型应广单片机带充电应用方案,3连套11位SuLED (Super LED) PWM生成器,充电模式待机功耗57uA(VCC)


Padauk应广科技单片机PFS154超低功耗LED闪光灯,尽可能长时间地用一块电池的电量让LED闪烁的挑战又如何呢

Padauk应广科技单片机PFS154超低功耗LED闪光灯,尽可能长时间地用一块电池的电量让LED闪烁的挑战又如何呢


应广单片机8位单片机PWM呼吸灯代码, 利用PWM计数器分别为 TM2\TM3\T16单片机嵌入式硬件开发

应广单片机8位单片机PWM呼吸灯代码, 利用PWM计数器分别为 TM2\TM3\T16单片机嵌入式硬件开发


开发实力

专业资深的软硬件开发工程师团队,熟悉行业客户产品硬件技术平台解决方案

全球渠道

为客户提供高性价比的产品和服务,满足客户及时快速的电子生产制造需求

品质保证

专业的测试保证团队,保证每批方案的稳定性,兼容性,和抗干扰性

售后服务

专业的技术服务团队,24小时为客户提供各种软硬件的技术支持和售后服务

服务热线

0755-88364040
18902464556

义隆代理

烧录开发

技术支持

申请样品

扫描微信二维码