📄 main.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 + -