📄 main.lis
字号:
.module main.c
.area text
; va -> 0,X
; ko -> 2,X
0000 _main::
0000 A7FD ais #-3
0002 95 tsx
0003 ; /*-----------------------------------------------------*
0003 ; *工 程 名:
0003 ; *硬件连接:
0003 ; *程序描述: SD-HC08 模板生成
0003 ; */
0003 ; /*[头文件]*/
0003 ; #include "GP32C.h" //映像寄存器地址头文件
0003 ; #include "KB.h"
0003 ; /*[主函数]*/
0003 ; void main()
0003 ; { unsigned int va;
0003 ; unsigned char ko;
0003 ; KB_Init();
0003 CD0000 jsr _KB_Init
0006 95 tsx
0007 203F bra L3
0009 L2:
0009 ; while(1)
0009 ; {
0009 L5:
0009 ; do
0009 ; {
0009 ; ko=KB_Scan();
0009 CD0000 jsr _KB_Scan
000C 95 tsx
000D B700 sta *__r1
000F E702 sta 2,X
0011 L6:
0011 ; }while(ko==0xffff);//查找有没有按键按下,有就跳出,
0011 E602 lda 2,X
0013 A1FF cmp #-1
0015 27F2 beq L5
0017 ; va=KB_Def(ko);
0017 87 psha
0018 CD0000 jsr _KB_Def
001B A701 ais #1
001D 95 tsx
001E B600 lda *__r0
0020 F7 sta ,X
0021 B600 lda *__r1
0023 E701 sta 1,X
0025 ; Timer(va);
0025 87 psha
0026 F6 lda ,X
0027 87 psha
0028 CD004D jsr _Timer
002B A702 ais #2
002D 95 tsx
002E L8:
002E ; do
002E ; {ko=KB_Scan();
002E CD0000 jsr _KB_Scan
0031 95 tsx
0032 B700 sta *__r1
0034 E702 sta 2,X
0036 L9:
0036 E602 lda 2,X
0038 A1FF cmp #-1
003A 26F2 bne L8
003C 1A20 bset #5,0x20
003E A6FF lda #-1
0040 B707 sta 0x7
0042 B603 lda 0x3
0044 AA30 ora #48
0046 B703 sta 0x3
0048 L3:
0048 20BF bra L2
004A X0:
004A L1:
004A A703 ais #3
004C .dbline 0 ; func end
004C 81 rts
004D ; frql_w -> 0,X
004D ; frqh_w -> 1,X
004D ; frq_c -> 2,X
004D ; frq -> 6,X
004D _Timer::
004D A7FC ais #-4
004F 95 tsx
0050 ; }while(ko!=0xffff);//查询按键有没有放开,当放开就停止
0050 ; T1SC|=1<<TSTOPBit;//关记数器,第五位.
0050 ; DDRD=0xff;
0050 ; PTD|=0x30;//使数据口为I/o模式,输出为低电平(为1)
0050 ; }
0050 ; }
0050 ; /*定时器初始化设计*/
0050 ; void Timer(unsigned int frq)
0050 ; { unsigned int frq_c;
0050 ; unsigned char frqh_w,frql_w;
0050 ; frq_c=38400/frq;//得到频率值所对应的周期
0050 A600 lda #0
0052 B700 sta *__rlo
0054 A696 lda #-106
0056 B700 sta *__rhi
0058 E607 lda 7,X
005A 87 psha
005B E606 lda 6,X
005D 87 psha
005E CD0000 jsr __divmod16u
0061 A702 ais #2
0063 B600 lda *__rhi
0065 E702 sta 2,X
0067 B600 lda *__rlo
0069 E703 sta 3,X
006B ; frq=((frq_c*2)>>8)&0x00ff;//得到高八位的数值
006B 48 lsla
006C E602 lda 2,X
006E 49 rola
006F E707 sta 7,X
0071 4F clra
0072 E706 sta 6,X
0074 ; frqh_w=frq;
0074 E607 lda 7,X
0076 E701 sta 1,X
0078 ; frq=((frq_c*2)&0x00ff);//得到相应的低八位
0078 E603 lda 3,X
007A 48 lsla
007B B700 sta *__r1
007D E602 lda 2,X
007F 49 rola
0080 B600 lda *__r1
0082 E707 sta 7,X
0084 4F clra
0085 E706 sta 6,X
0087 ; frql_w=frq;
0087 E607 lda 7,X
0089 F7 sta ,X
008A ; //禁止溢出中断、不启动计数、分频因子=64
008A ; T1SC=0b00100110;//分频系数为64,不容许中断,定时器停止
008A A626 lda #38
008C B720 sta 0x20
008E ; T1SC0=0b00010110; //0b00010110设置通道0输出捕捉模式,
008E A616 lda #22
0090 B725 sta 0x25
0092 ; //不允许比较中断,输出电平反转
0092 ; //计数寄存器初值=0x0000
0092 ; T1CNTH=0x00; T1CNTL=0x00;
0092 3F21 clr 0x21
0094 3F22 clr 0x22
0096 ; //对应的数值产生对应的频率值,在通道寄存器溢出时翻转;
0096 ; T1CH0H=frqh_w; T1CH0H=frql_w;
0096 E601 lda 1,X
0098 B726 sta 0x26
009A F6 lda ,X
009B B726 sta 0x26
009D ; //允许定时器1计数寄存器计数
009D ; T1SC&=~(1<<TSTOPBit);
009D 1B20 bclr #5,0x20
009F L11:
009F A704 ais #4
00A1 .dbline 0 ; func end
00A1 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -