首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

IAR-C编程示例-S3F9454

IAR-C编程示例-S3F9454

IAR-C编程示例-S3F9454
--------------------------------------------------------------------------------

产品名称 IAR-C编程示例
使用MCU S3F9454
FOSC = 3.2MHZ
以下示例中很多变量及定义可能并未
用到,在此仅仅作为示范性列示
#i nclude ioS3C9454.h
#i nclude intrinsics.h包含内部函数
此处为宏定义替换
#define uchar unsigned char
#define uint  unsigned int
#define nop (__no_operation())          将后者指令行缩写为nop;
#define di  (__disable_interrupt())     将后者指令行缩写为di;
#define ei  (__enable_interrupt())      将后者指令行缩写为ei;
此处定义程序所用到的全局变量
uchar RUNFLAG   = 0;
uchar DISPFLAG  = 0;
uchar ERRFLAG   = 0;                错误代码标志寄存器
uchar KEY_CODE  = 0;                键扫描码
程序所用函数声明
凡程序中所用到的函数请先在这里声明
__interrupt  void  int_9454();
void    chip_init();
void    LedScan();

定义9454的SMART OPTION值
003CH,must be initialized to 0
003DH,must be initialized to 0
003EH,enable LVR(2.3V)
003FH,internal RC(3.2MHZ in Vdd=5V)
__code  const  volatile  uchar SmartOption[4] @0x003c = {0x0,0x0,0xe7,0x03};

数码管显示代码定义(在ROM=0X40)
__code  const volatile uchar DigitCode[12] @0x0040 =
{
  0x03,   '0'
  0x9f,   '1'
  0x25,   '2'
  0x0d,   '3'
  0x99,   '4'
  0x49,   '5'
  0x41,   '6'
  0x1f,   '7'
  0x01,   '8'
  0x09,   '9'
  0xff,   'A'
  0x61,   'E'
};
========================主程序控制===========================
void main(void)
{
  uint  loop;
  填充系统SMART OPTION
  uchar buffer = SmartOption[0];
  
  芯片启动初始化过程
  chip_init();         
  主循环开始
  while(1)
  {
    P2      = 0x00;
    以下定时取反P2口输出状态
    for(loop=0;loop50;loop++);
    P2      = 0xff;
    for(loop=0;loop50;loop++);
  }
}
启动时IO初始化子过程
void  chip_init()
{
    BTCON = 0xa3;         Watch-dog disable
    CLKCON  = 0x18;       selet non-divided CPU clock
    P0PND   = 0x0;        P0INT disable
    P0CONH  = 0xdf;       P0.7 is as AD convert port
                          P0.6 is PWM output
                          P0.5 is as AD convert port  
                          P0.4 is as AD convert port
    P0CONL  = 0xfa;       P0.3 is as AD convert port
                          P0.2 is as AD convert port  
                          P0.0,P0.1 is as push-pull output port
    P0 = 0x0;                                
    P1CON = 0xa;          P1.0 is as push-pull output port  
                          P1.1 is as push-pull output port
    P1 = 0x0;
   
    P2CONH = 0x2a;        P2.0-P2.5 is as push-pull output
    P2CONL = 0xaa;        P2.6 is as AD input
    P2 = 0x1e;   
   
    PWMDATA = 0x0;
    PWMCON = 0x5c;        PWM input clock is fosc8,enable PWM output
                          reload from 6 bit coun
    T0DATA = 0x32;
    T0CON =0x4a;          TMR0 start count,f=fosc256
                          enable TMR0 interrupt4ms
    P2 = 0xff;
  
}
中断向量及服务程序定义
#pragma vector=0x00
__interrupt void int_9454()
{
  T0CON = T0CON & 0xfe;     必须清T0中断标志
   
  LedScan();                数码管显示扫描过程
}
void  LedScan(void)
{
  这里是LED显示定时扫描过程
}
返回列表