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

📄 traffic light firmware.lst

📁 交通灯汇编程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
     1  000000             	CHIP	SN8P2604
     2  000000             //{{SONIX_CODE_OPTION
     3  000000             	.Code_Option	Noise_Filter	Disable
     4  000000             	.Code_Option	Reset_Pin	Reset
     5  000000             	.Code_Option	Watch_Dog	Disable		; Disable Watchdog
     6  000000             	.Code_Option	High_Clk	4M_X'tal	; Crystal/Resonator: 2Mhz~10Mhz
     7  000000             	.Code_Option	Fcpu		#2     ; Fcpu = High_Clk/4
     8  000000             	.Code_Option	Security	Disable
     9  000000             //}}SONIX_CODE_OPTION
    10  000000             .DATA
    11  0000 D             	DLY1	DS	02H
    12  0002 D             	DLY2	DS	03H	;延时程序暂存器
    13  E 00000004         	TIMER00	EQU	04H	;tc1中断计数器
    14  E 00000005         	TIMER01	EQU	05H	;t0中断计数器
    15  E 00000006         	S_CNT	EQU	06H
    16  E 00000007         	S_BIT	EQU	07H
    17  E 0000000A         	DISP1	EQU	0AH
    18  E 0000000B         	DISP2	EQU	0BH
    19  E 0000000C         	DISP3	EQU	0CH
    20  E 0000000D         	DISP4	EQU	0DH
    21  E 00000010         	N_L	EQU	10H	;北边显示器低位
    22  E 00000011         	N_H	EQU	11H	;北边显示器高位
    23  E 00000012         	E_L	EQU	12H	;东边显示器低位
    24  E 00000013         	E_H	EQU	13H	;东边显示器高位
    25  000000             .CODE
    26  000000             	ORG	00H
    27  000000   8010(2)  	JMP	MAIN
    28  000008             	ORG	08H
    29  000008   80C9(2)  	JMP	CYC
    30  000010             	ORG	10H
    31  000010             ;************************************
    32  000010             ;主程序
    33  000010             ;************************************
    34  000010             MAIN:
    35  000010   C0D2(2)  	CALL	INIT_IO
    36  000011   C0D9(2)  	CALL	INIT_DATA
    37  000012   C0E0(2)  	CALL	INIT_TIMER
    38  000013   C0ED(2)  	CALL	INIT_TC0
    39  000014             START:
    40  000014   C02D(2)  	CALL	DATA_SHOW
    41  000015   C017(2)  	CALL	SCAN
    42  000016   8014(2)  	JMP	START
    43  000017             ;************************************
    44  000017             ;扫描
    45  000017             ;************************************
    46  000017             SCAN:
    47  000017   2D04(1)  	MOV	A,#04H
    48  000018   1F06(1)  	MOV	S_CNT,A
    49  000019   2DF7(1)  	MOV	A,#11110111B
    50  00001A   1F07(1)  	MOV	S_BIT,A
    51  00001B   2B84(1)  	CLR	Y
    52  00001C   2D0A(1)  	MOV	A,#0AH
    53  00001D   1F83(1)  	MOV	Z,A
    54  00001E             SCAN_LP:
    55  00001E   1EE7(1)  	MOV	A,@YZ
    56  00001F   1FD2(1)  	MOV	P2,A
    57  000020   1E07(1)  	MOV	A,S_BIT
    58  000021   1FD5(1)  	MOV	P5,A
    59  000022   C10C(2)  	CALL	DELAY
    60  000023   2606(1+S)  	DECMS	S_CNT
    61  000024   8026(2)  	JMP	@F
    62  000025   0E00(2)  	RET
    63  000026             @@:
    64  000026   1683(1+S)  	INCMS	Z
    65  000027   0000(1)  	NOP
    66  000028   6A86(1)  	B0BSET	FC
    67  000029   0907(1)  	RRCM	S_BIT
    68  00002A   2DFF(1)  	MOV	A,#0FFH
    69  00002B   1FD2(1)  	MOV	P2,A
    70  00002C   801E(2)  	JMP	SCAN_LP
    71  00002D             ;************************************
    72  00002D             ;显示
    73  00002D             ;************************************
    74  00002D             DATA_SHOW:
    75  00002D   1E12(1)  	MOV	A,E_L
    76  00002E   2A0F(1)  	AND	A,#00001111B	;取出秒的低四位元来做数据转换
    77  00002F   C0FC(2)  	CALL	BCD_DISP
    78  000030   1F0A(1)  	MOV	DISP1,A		;把显示的值送到disp1
    79  000031             
    80  000031   1E13(1)  	MOV	A,E_H
    81  000032   2A0F(1)  	AND	A,#00001111B	;取出秒的高四位元来做数据转换
    82  000033   C0FC(2)  	CALL	BCD_DISP
    83  000034   1F0B(1)  	MOV	DISP2,A		;把显示的值送到disp2
    84  000035             
    85  000035   1E10(1)  	MOV	A,N_L
    86  000036   2A0F(1)  	AND	A,#00001111B	;取出秒的低四位元来做数据转换
    87  000037   C0FC(2)  	CALL	BCD_DISP
    88  000038   1F0C(1)  	MOV	DISP3,A		;把显示的值送到disp3
    89  000039             
    90  000039   1E11(1)  	MOV	A,N_H
    91  00003A   2A0F(1)  	AND	A,#00001111B	;取出秒的高四位元来做数据转换
    92  00003B   C0FC(2)  	CALL	BCD_DISP
    93  00003C   1F0D(1)  	MOV	DISP4,A		;把显示的值送到disp4
    94  00003D   0E00(2)  	RET
    95  00003E             ;************************************
    96  00003E             ;TC1中断
    97  00003E             ;************************************
    98  00003E             MY_IRQ:
    99  00003E   0400(1)  	PUSH
   100  00003F   7EC8(1+S)  	B0BTS1	FTC1IRQ
   101  000040   80FA(2)  	JMP	EXIT_IRQ	;检查中断
   102  000041   66C8(1)  	B0BCLR	FTC1IRQ
   103  000042   2D3D(1)  	MOV	A,#61
   104  000043   1FDD(1)  	MOV	TC1C,A		;设定每50ms中断一次
   105  000044   2604(1+S)  	DECMS	TIMER00
   106  000045   80FA(2)  	JMP	EXIT_IRQ
   107  000046   2D14(1)  	MOV	A,#20
   108  000047   1F04(1)  	MOV	TIMER00,A
   109  000048             //判断是否为00
   110  000048             CHECK00:
   111  000048   2D00(1)  	MOV	A,#00H
   112  000049   0711(1+S)  	CMPRS	A,N_H		;yes,比较北边高位是否为00	
   113  00004A   80A9(2)  	JMP	NORMAL00	;no,减一秒
   114  00004B             
   115  00004B   2D00(1)  	MOV	A,#00H
   116  00004C   0710(1+S)  	CMPRS	A,N_L
   117  00004D   8057(2)  	JMP	CHECK42
   118  00004E   804F(2)  	JMP	CHECK18		;比较高位低位是否为00,用以隔开设定17s,正常计数。
   119  00004F             CHECK18:
   120  00004F   2D18(1)  	MOV	A,#18H
   121  000050   07D1(1+S)  	CMPRS	A,P1
   122  000051   8053(2)  	JMP	CHECK14		;n=第一步,设定17s计数
   123  000052   8065(2)  	JMP	SET03		;判断此时led显示是否为18h,y=第二步,03--00
   124  000053             CHECK14:
   125  000053   2D14(1)  	MOV	A,#14H
   126  000054   07D1(1+S)  	CMPRS	A,P1
   127  000055   805E(2)  	JMP	SET17
   128  000056   806C(2)  	JMP	SET20
   129  000057             CHECK42:
   130  000057   2D42(1)  	MOV	A,#42H
   131  000058   07D1(1+S)  	CMPRS	A,P1			
   132  000059   80A9(2)  	JMP	NORMAL00
   133  00005A             	
   134  00005A   2D04(1)  	MOV	A,#04H
   135  00005B   0710(1+S)  	CMPRS	A,N_L
   136  00005C   80A9(2)  	JMP	NORMAL00
   137  00005D   8073(2)  	JMP	SET031
   138  00005E             SET17:
   139  00005E   2D18(1)  	MOV	A,#18H
   140  00005F   1FD1(1)  	MOV	P1,A
   141  000060   2D08(1)  	MOV	A,#08
   142  000061   1F10(1)  	MOV	N_L,A
   143  000062   2D01(1)  	MOV	A,#01
   144  000063   1F11(1)  	MOV	N_H,A	;北边赋值18
   145  000064   80A9(2)  	JMP	NORMAL00
   146  000065             SET03:
   147  000065   2D14(1)  	MOV	A,#14H
   148  000066   1FD1(1)  	MOV	P1,A
   149  000067   2D03(1)  	MOV	A,#03
   150  000068   1F10(1)  	MOV	N_L,A
   151  000069   2D00(1)  	MOV	A,#00
   152  00006A   1F11(1)  	MOV	N_H,A	;北边赋值03
   153  00006B   80A9(2)  	JMP	NORMAL00
   154  00006C             SET20:
   155  00006C   2D42(1)  	MOV	A,#42H	
   156  00006D   1FD1(1)  	MOV	P1,A
   157  00006E   2D01(1)  	MOV	A,#01
   158  00006F   1F10(1)  	MOV	N_L,A
   159  000070   2D02(1)  	MOV	A,#02
   160  000071   1F11(1)  	MOV	N_H,A
   161  000072   80A9(2)  	JMP	NORMAL00
   162  000073             SET031:
   163  000073   2D22(1)  	MOV	A,#22H
   164  000074   1FD1(1)  	MOV	P1,A
   165  000075   2D04(1)  	MOV	A,#04
   166  000076   1F10(1)  	MOV	N_L,A
   167  000077   2D00(1)  	MOV	A,#00
   168  000078   1F11(1)  	MOV	N_H,A	;北边赋值03
   169  000079   80A9(2)  	JMP	NORMAL00
   170  00007A             ;*********************************
   171  00007A             ;TO中断
   172  00007A             ;*********************************
   173  00007A             INTT0:
   174  00007A   0400(1)  	PUSH
   175  00007B   7CC8(1+S)  	B0BTS1	FT0IRQ
   176  00007C   80FA(2)  	JMP	EXIT_IRQ	;检查中断
   177  00007D             
   178  00007D   64C8(1)  	B0BCLR	FT0IRQ
   179  00007E   2D3D(1)  	MOV	A,#61
   180  00007F   1FD9(1)  	MOV	T0C,A		;设定每50ms中断一次
   181  000080   2605(1+S)  	DECMS	TIMER01
   182  000081   80FA(2)  	JMP	EXIT_IRQ
   183  000082   2D14(1)  	MOV	A,#20
   184  000083   1F05(1)  	MOV	TIMER01,A
   185  000084             CHECKE00:
   186  000084   2D00(1)  	MOV	A,#00H
   187  000085   0713(1+S)  	CMPRS	A,E_H
   188  000086   80B9(2)  	JMP	NORMAL01
   189  000087   2D00(1)  	MOV	A,#00H
   190  000088   0712(1+S)  	CMPRS	A,E_L
   191  000089   80B9(2)  	JMP	NORMAL01	;检查00,用以隔开东边计数

⌨️ 快捷键说明

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