打印
[MCU]

应广单片机PMC150中断使用说明

[复制链接]
5192|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
工控秀才|  楼主 | 2013-12-17 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PMC150是应广科技2013年新推的一颗纯IO功能的MCU,最大可以出9个引脚,一般封装为SOP8,SOT23-6或者DIP8(在小家电等产品上应用)。
目前已经大量使用在数据线,程序加密,豆浆打磨机,自行车灯,红外遥控器,摩托车,电单车报警器等产品上。
PMC150具有两个中断功能,一个是外部IO口中断,一个是定时器中断。一些刚入手的用户总是反应设置不对,不工作
所以单独和大家说说使用。
需要用到的控制寄存器和指令分别是:
1.  中断允许寄存器INTEN,可读写:
    bit0控制PA0外部输入中断;
    bit2控制定时器T16中断;
    其他位保留,一般设置为0
2.  中断标志寄存器INTRQ,可读写:
    bit0是PA0外部输入中断标志;
    bit2是定时器T16中断标志;
    其他位保留,一般设置为0
3. 中断边沿选择寄存器INTEGS,只写:
    INTEGS.1~INTEGS0:
         0            0        A0上升沿和下降沿都产生中断;
         0            1        A0上升沿产生中断;
         1            0        A0下降沿产生中断;
         1            1        :保留,不使用
    INTEGS.4:
         0                      :T16时钟上升沿产生中断;
         1                      :T16时钟下降沿产生中断;
     其他位保留

4.特别指令:
   engint:    使能总的中断
   disgint:   关闭总的中断

    和大家的IC一样,用起来很简单的。
    请看DEMO程序,该程序利用T16产生50us的中断,由PA6输出,并产生25ms的脉冲方波信号,由PA4输出
    另外PA0产生外部中断,在终中断中取反PA3.

//***************************************************************************
//*****  PMC150 Peocessor Application Example Project   *****
//***************************************************************************
// Project Name :: PMC150
//      Version      :: V0.0  
// Module Name  ::
// Abstract     :: interruput study 中断使用例程
//         
// Environment:
//         PADAUK FPPA(TM) IDE Tool Version : 0.58
//
// Revision History:
//         DEC. 5, 2013        Raker.Yang  Created                 
/////////////////////////////////////////////////////////////////////////
// Copyright (C) 2013 by A-Tech Electronic Technology Co. Ltd. All rights reserved.
#define         WTD_ON     set1  clkmd.1
#define         WTD_OFF    set0  clkmd.1
T16_Base        EQU        32568 + 10     // ICE = 32568 + 20
//设定50us 中断,定时器为系统时钟,4M,需要计数200次。
//计数初值为32768 -200 = 32568
KEY_IN          equ   pa.7 //按键输入
//BLU_OUT         equ   pa.4 //低1.4s,高2.8s
INT_IN                 equ   pa.0 //
LED_RED_OUT            equ   pa.4 //
LED_GRN_OUT            equ   pa.3 //
PWM_T16_OUT            equ   pa.6
.ramadr 0
word             t16_cnt;
word             led_flash_cnt;
byte             sysflag;
f_ledg_on        equ  sysflag.0 //add--->1; sub --->0
f_ledr_on        equ  sysflag.1
f_pwm_t16        equ  sysflag.2

void   t16init(void);
void    t16_init(void)
{
        word   t16_index;
        T16M  = 0x27; //2F,系统时钟除以1,BIT15位中断
        t16_index = T16_Base;
        stt16  t16_index;
         
}


void FPPA0 (void)
{
byte  key_value,key_value_bak;
byte  sys_stop_cnt;
byte  a_temp_m;

.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=3.3V//, Bandgap=On;
WTD_OFF;     // WatchDog Enable
misc   = 0x20;
intrq  = 0x00;
inten.pa0  = 1; //开启定时器和PA0中断
inten.t16  = 1;
integs     = 0;
//io_init();
pa = 0xff;
paph = 0x01;   //PA0输入上啦,其他口都为输出
pac =  0xfe;
$ padier 0xf9; //所有口都为数字口,注意保留口不能设置为1
sysflag = 0;
t16_init();
wdreset;
  WTD_ON;
  engint;
while (1)
{     //a
  if(inten.7 == 0)
  {
   goto 0;
   }
  else
  {
   wdreset;
   }
//===============================================
}   //aa
}

void Interrupt (void)
{
byte temp;
pushaf  //  
if (Intrq.T16) //timer interruput
{
  ldt16 t16_cnt;
  temp       = t16_cnt$0;
  t16_cnt = T16_Base+temp;
  stt16 t16_cnt;
  if(f_pwm_t16 == 1)
  {
   f_pwm_t16 = 0;
   PWM_T16_OUT = 1;
   }
  else
  {
   f_pwm_t16 = 1;
   PWM_T16_OUT = 0;   
   }
   if(led_flash_cnt < 10000)
   {
    led_flash_cnt++;
    if(led_flash_cnt < 5000)
    {
     f_ledr_on = 1;
     }
    else
    {
     f_ledr_on = 0;
     }
    }
   else
   {
     led_flash_cnt = 0;
     }
     if(f_ledr_on == 1)
      {
       LED_RED_OUT = 0;
   
   f_ledr_on = 0;
   LED_RED_OUT = 0;
       }
     else
      {
       LED_RED_OUT = 1;
   f_ledr_on = 1;
   LED_RED_OUT = 1;
       }
  Intrq   = Intrq & 0xfb;         
}
  if(Intrq.pa0)
  {
   
   
   if(f_ledg_on == 1)
   {
    f_ledg_on = 0;
    LED_GRN_OUT = 0;
    }
   else
   {
    f_ledg_on = 1;
    LED_GRN_OUT = 1;
    }
   Intrq   = Intrq & 0xfe;
  }
  

popaf  // At PDK80CXX, not support the command
}

相关帖子

沙发
ayb_ice| | 2013-12-17 14:47 | 只看该作者
这个C编译器真有些怪怪的

使用特权

评论回复
板凳
工控秀才|  楼主 | 2013-12-17 14:57 | 只看该作者
嗯,专业的,只针对应广的产品设计的。汇编和C直接混合是它的一个特色。

使用特权

评论回复
地板
www5911839| | 2013-12-17 15:28 | 只看该作者
若要移植到其它MCU上,比SONIX或其它兼容标准C的MCU, 得多花上不少时间吧!

使用特权

评论回复
5
工控秀才|  楼主 | 2013-12-17 17:58 | 只看该作者
用了应广的产品后,一般都不会想再换啦:lol;P

使用特权

评论回复
6
forint2012| | 2014-11-1 17:25 | 只看该作者
TIM16 设置BIT15位中断的时候 溢出时的最大值不是2^16=65536 么 ?怎么是2^15=32768 ?

使用特权

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

本版积分规则

个人签名:杨R QQ:595142970, 群:72958773 T: 1351077九6五3,微公号,应广单片机 https://shop150007363.taobao.com

38

主题

286

帖子

11

粉丝