单片机智能遥控器系统设计 第7页

单片机智能遥控器系统设计 第7页
主程序的逐步设计
3.3.1 程序流程图3.3.2主程序详细编码
//预定义
#define P_IOA_Data          (volatile unsigned int *)0x7000
#define P_IOA_Buffer      (volatile unsigned int *)0x7001
#define P_IOA_Dir       (volatile unsigned int *)0x7002
#define P_IOA_Attrib      (volatile unsigned int *)0x7003
#define P_IOA_Latch         (volatile unsigned int *)0x7004
#define P_IOB_Data      (volatile unsigned int *)0x7005
#define P_IOB_Buffer      (volatile unsigned int *)0x7006
#define P_IOB_Dir       (volatile unsigned int *)0x7007
#define P_IOB_Attrib        (volatile unsigned int *)0x7008
#define P_Watchdog_Clear       (volatile unsigned int *)0x7012
#define P_SystemClock    (volatile unsigned int *)0x7013

#define Key_5    (volatile unsigned int *)0x0008  //5键
#define Key_6    (volatile unsigned int *)0x0004  //6键
#define Key_1    (volatile unsigned int *)0x000c  //1键
#define Key_2    (volatile unsigned int *)0x0002  //2键
#define Key_3    (volatile unsigned int *)0x000a  //3键
#define Key_4    (volatile unsigned int *)0x0006  //4键
#define Key_7    (volatile unsigned int *)0x000e  //7键
#define Key_8    (volatile unsigned int *)0x0001  //8键
#include "hardware.h"
#include "s480.h"
unsigned int KeyFlag=0;    //当前按键的状态,1有效
unsigned int KeyState=0;   //遥控输入
void PlayRespond(int Result)        //发音子函数的定义
www.751com.cn
ACM_S480_Stop
(); 
}
//主程序开始
main()
{
 //初始化;
 InitIOA();                            //初始化A口
 InitIOB();                            //初始化B口
 INT1kHzON();                        //开启1KHz中断
SACM_S480_Initial(1);                //初始化SACM_S480  
 //循环等待按键
 while(1)
 {
  switch(KeyState)
  {
  case Key_5:
    PlayRespond(5);
   break;
  case Key_6:  
    PlayRespond(6);
   break;
  case Key_1:  
    PlayRespond(1);
   break;
  case Key_2:  
    PlayRespond(2);
   break;
  case Key_3:
    PlayRespond(3);
   break;
  case Key_4:  
    PlayRespond(4);
   break;
  case Key_7:
    PlayRespond(7);
   break;
  case Key_8:
    PlayRespond(8);
   break;
  }    
 } 
 INT1kHzOFF();                            //关闭1KHz中断
}
3.5中断服务程序设计
3.5.1中断程序流程
SPACE061A中断源列表
 
3.5.2中断服务程序编码
.INCLUDE  hardware.inc
.INCLUDE  Resource.inc
.include s480.inc

.DEFINE    RUN_1kHz_TimeBase_INT   0x0010  //遥控输入
.EXTERNAL  _GTime
.EXTERNAL  _KeyFlag
.EXTERNAL  _KeyState
.EXTERNAL  R_InterruptStatus

.PUBLIC  _FIQ,_BREAK,_IRQ0, _IRQ1, _IRQ2, _IRQ3, _IRQ4, _IRQ5, _IRQ6, _IRQ7

.code
.PUBLIC _INT1kHzOFF
_INT1kHzOFF:.proc
 int off
    R1 = 0xffff
    [P_INT_Clear] = R1           // Clear interrupt occuiped events
    R1 = [R_InterruptStatus]  //
    R1 &= 0xffef     // Disenable 1kHz IRQ
    [R_InterruptStatus] = R1  //
    [P_INT_Ctrl] = R1    //
 int irq
 retf
.endp

.TEXT
_FIQ:
 PUSH R1,R4 to [sp];
 R1 = 0x0001;
    [P_Watchdog_Clear] = R1;
 R1 = 0x2000;
 test R1,[P_INT_Ctrl];
 jnz L_FIQ_TimerA;
 R1 = 0x0800;
 test R1,[P_INT_Ctrl];
 jnz L_FIQ_TimerB;
L_FIQ_PWM:
 R1 = C_FIQ_PWM;
 [P_INT_Clear] = R1;
 POP R1,R4 from[sp];
 reti;
L_FIQ_TimerA:
 [P_INT_Clear] = R1;
 call F_FIQ_Service_SACM_S480;
 pop R1,R4 from [sp];
 RETI;
L_FIQ_TimerB:
 [P_INT_Clear] = R1;
 pop R1,R4 from [sp];
 RETI;
_BREAK:

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

  • 上一篇文章:
  • 下一篇文章:
  • Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有