⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 摩托罗拉单片机的定时器溢出中断的原代码
💻 LIS
字号:
                        .module main.c
                        .area text
                ;              i -> 0,X
                ;              j -> 1,X
 0000           _main::
 0000 A7FE              ais #-2
 0002 95                tsx
 0003           ; /*-----------------------------------------------------*
 0003           ; *工 程 名:Timer1.prj                                   *
 0003           ; *硬件连接:无                                           *
 0003           ; *程序描述:1.从串口接收表示时间的3字节数据              *
 0003           ; *         2.利用定时器溢出中断修改时间,并发送新时间    *
 0003           ; *目    的:学习定时器基本功能                           *
 0003           ; *---------《嵌入式应用技术基础教程》教学实例----------*/
 0003           ; //头文件
 0003           ; #include "GP32C.H"
 0003           ; #include "SCI.h"          //串行通信子程序头文件
 0003           ; //有关寄存器位定义
 0003           ; #define TSTOPBit   5      //定时器计数停止位
 0003           ; #define TOFBit     7      //定时器溢出标志位
 0003           ; //函数声明
 0003           ; extern void SCIInit(void);
 0003           ; extern void SCISendN(unsigned char n,unsigned char ch[]);
 0003           ; void Timer1init(void);
 0003           ; unsigned char time[3];      //存放时、分、秒
 0003           ; //*====================================================*
 0003           ; //*[主程序]
 0003           ; void main()
 0003           ;   {
 0003           ;      unsigned char i; 
 0003           ;        unsigned char j;
 0003           ;        asm("SEI");               //关总中断
 0003 9B                SEI
 0004           ;        SCIInit();
 0004 CD0000            jsr _SCIInit
 0007           ;        Timer1init();             //调定时器1初始化子程序
 0007 CD0038            jsr _Timer1init
 000A 95                tsx
 000B           ;        SCC2|=(1<<5);             //令SCC2.5=1,允许接收中断
 000B 1A14              bset #5,0x14
 000D           ;        asm("CLI");               //开总中断
 000D 9A                CLI
 000E           ;        //给时分秒赋初始值
 000E           ;        time[0]=0; time[1]=0; time[2]=0; 
 000E 3F00              clr *_time
 0010 3F01              clr *_time+1
 0012 3F02              clr *_time+2
 0014           ;        i=time[2];
 0014 B602              lda *_time+2
 0016 F7                sta ,X
 0017 201A              bra L6
 0019           L5:
 0019           ; 	 while(1)
 0019           ; 	{
 0019           ; 	  j=time[2];
 0019 B602              lda *_time+2
 001B E701              sta 1,X
 001D           ;         if (i!=j)                      //数组已经更新
 001D F6                lda ,X
 001E E101              cmp 1,X
 0020 2711              beq L9
 0022           ;            {SCISendN(3,time); i=j;}    //发送新数据
 0022 450000            ldhx #_time
 0025 89                pshx
 0026 8B                pshh
 0027 A603              lda #3
 0029 87                psha
 002A CD0000            jsr _SCISendN
 002D A703              ais #3
 002F 95                tsx
 0030 E601              lda 1,X
 0032 F7                sta ,X
 0033           L9:
 0033           L6:
 0033 20E4              bra L5
 0035           X0:
 0035           L1:
 0035 A702              ais #2
 0037                   .dbline 0 ; func end
 0037 81                rts
 0038           _Timer1init::
 0038           ;      }
 0038           ;   }
 0038           ; /*[内部直接调用子程序存放处]*/
 0038           ; /*Timer1init:定时器1初始化子程序-----------------------*
 0038           ; *功能:对定时器1初始化                                  *
 0038           ; *参数:无                                               *
 0038           ; *返回:无                                               *
 0038           ; *-----------------------------------------------------*/
 0038           ; void Timer1init(void)
 0038           ;  {
 0038           ;      //允许溢出中断、不启动计数、分频因子=64
 0038           ;      T1SC=0b01100110;
 0038 A666              lda #102
 003A B720              sta 0x20
 003C           ;      //计数寄存器初值=0x0000
 003C           ;      T1CNTH=0x00; T1CNTL=0x00;           
 003C 3F21              clr 0x21
 003E 3F22              clr 0x22
 0040           ;      //1秒产生1次溢出中断,计数寄存器=1×(2457600/64)=9600
 0040           ;      T1MODH=0x96; T1MODL=0x00;
 0040 A696              lda #-106
 0042 B723              sta 0x23
 0044 3F24              clr 0x24
 0046           ;      //允许定时器1计数寄存器计数
 0046           ;      T1SC&=~(1<<TSTOPBit);
 0046 1B20              bclr #5,0x20
 0048           L11:
 0048                   .dbline 0 ; func end
 0048 81                rts
                        .area bss
 0000           _time::
 0000                   .blkb 3

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -