📄 main.s
字号:
.module main.c
.area text
; i -> 0,X
; j -> 1,X
_main::
ais #-2
tsx
; /*-----------------------------------------------------*
; *工 程 名:Timer1.prj *
; *硬件连接:无 *
; *程序描述:1.从串口接收表示时间的3字节数据 *
; * 2.利用定时器溢出中断修改时间,并发送新时间 *
; *目 的:学习定时器基本功能 *
; *---------《嵌入式应用技术基础教程》教学实例----------*/
; //头文件
; #include "GP32C.H"
; #include "SCI.h" //串行通信子程序头文件
; //有关寄存器位定义
; #define TSTOPBit 5 //定时器计数停止位
; #define TOFBit 7 //定时器溢出标志位
; //函数声明
; extern void SCIInit(void);
; extern void SCISendN(unsigned char n,unsigned char ch[]);
; void Timer1init(void);
; unsigned char time[3]; //存放时、分、秒
; //*====================================================*
; //*[主程序]
; void main()
; {
; unsigned char i;
; unsigned char j;
; asm("SEI"); //关总中断
SEI
; SCIInit();
jsr _SCIInit
; Timer1init(); //调定时器1初始化子程序
jsr _Timer1init
tsx
; SCC2|=(1<<5); //令SCC2.5=1,允许接收中断
bset #5,0x14
; asm("CLI"); //开总中断
CLI
; //给时分秒赋初始值
; time[0]=0; time[1]=0; time[2]=0;
clr *_time
clr *_time+1
clr *_time+2
; i=time[2];
lda *_time+2
sta ,X
bra L6
L5:
; while(1)
; {
; j=time[2];
lda *_time+2
sta 1,X
; if (i!=j) //数组已经更新
lda ,X
cmp 1,X
beq L9
; {SCISendN(3,time); i=j;} //发送新数据
ldhx #_time
pshx
pshh
lda #3
psha
jsr _SCISendN
ais #3
tsx
lda 1,X
sta ,X
L9:
L6:
bra L5
X0:
L1:
ais #2
.dbline 0 ; func end
rts
_Timer1init::
; }
; }
; /*[内部直接调用子程序存放处]*/
; /*Timer1init:定时器1初始化子程序-----------------------*
; *功能:对定时器1初始化 *
; *参数:无 *
; *返回:无 *
; *-----------------------------------------------------*/
; void Timer1init(void)
; {
; //允许溢出中断、不启动计数、分频因子=64
; T1SC=0b01100110;
lda #102
sta 0x20
; //计数寄存器初值=0x0000
; T1CNTH=0x00; T1CNTL=0x00;
clr 0x21
clr 0x22
; //1秒产生1次溢出中断,计数寄存器=1×(2457600/64)=9600
; T1MODH=0x96; T1MODL=0x00;
lda #-106
sta 0x23
clr 0x24
; //允许定时器1计数寄存器计数
; T1SC&=~(1<<TSTOPBit);
bclr #5,0x20
L11:
.dbline 0 ; func end
rts
.area bss
_time::
.blkb 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -