📄 main.src
字号:
; .\main.SRC generated from: main.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE main.c OMF2 ROM(SMALL) BROWSE SRC(.\main.SRC)
$NOMOD51
NAME MAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
FE BIT 098H.7
IE DATA 0A8H
P0_0 BIT 080H.0
P1_0 BIT 090H.0
P0_1 BIT 080H.1
P2_0 BIT 0A0H.0
P1_1 BIT 090H.1
P0_2 BIT 080H.2
P3_0 BIT 0B0H.0
P2_1 BIT 0A0H.1
P1_2 BIT 090H.2
P0_3 BIT 080H.3
P3_1 BIT 0B0H.1
P2_2 BIT 0A0H.2
P1_3 BIT 090H.3
P0_4 BIT 080H.4
P3_2 BIT 0B0H.2
P2_3 BIT 0A0H.3
P1_4 BIT 090H.4
P0_5 BIT 080H.5
RD BIT 0B0H.7
P3_3 BIT 0B0H.3
P2_4 BIT 0A0H.4
P1_5 BIT 090H.5
P0_6 BIT 080H.6
P3_4 BIT 0B0H.4
P2_5 BIT 0A0H.5
P1_6 BIT 090H.6
P0_7 BIT 080H.7
P3_5 BIT 0B0H.5
P2_6 BIT 0A0H.6
P1_7 BIT 090H.7
ES BIT 0A8H.4
P3_6 BIT 0B0H.6
P2_7 BIT 0A0H.7
IP DATA 0B8H
P3_7 BIT 0B0H.7
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
F1 BIT 0D0H.1
PSW DATA 0D0H
?PR?I2C_Start?MAIN SEGMENT CODE INBLOCK
?PR?I2C_Stop?MAIN SEGMENT CODE INBLOCK
?PR?_I2C_Send_Byte?MAIN SEGMENT CODE INBLOCK
?DT?_I2C_Send_Byte?MAIN SEGMENT DATA OVERLAYABLE
?PR?_I2C_Send_Addr?MAIN SEGMENT CODE INBLOCK
?PR?I2C_NOP?MAIN SEGMENT CODE INBLOCK
?PR?tuner_write?MAIN SEGMENT CODE INBLOCK
?PR?main?MAIN SEGMENT CODE INBLOCK
?DT?main?MAIN SEGMENT DATA OVERLAYABLE
?DT?MAIN SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC tuner_data
PUBLIC counter
PUBLIC main
PUBLIC tuner_write
PUBLIC I2C_NOP
PUBLIC _I2C_Send_Addr
PUBLIC _I2C_Send_Byte
PUBLIC I2C_Stop
PUBLIC I2C_Start
RSEG ?DT?_I2C_Send_Byte?MAIN
?_I2C_Send_Byte?BYTE:
byte?240: DS 1
ORG 1
mask?241: DS 1
RSEG ?DT?main?MAIN
?main?BYTE:
i?644: DS 1
ORG 1
channel?646: DS 1
RSEG ?DT?MAIN
counter: DS 1
tuner_data: DS 5
; /* giantbicycle */
; #include "at89s52.h"
;
; #define M_EN 0 /* Multi-channel Enable */
;
; /* GPIO Pin Definitions */
;
; #define I2C_SCL_CLR (P0 &= 0xFE) /* Clear I2C SCL (P0.0)*/
; #define I2C_SCL_SET (P0 |= 0x01) /* Set I2C_SCL */
;
; #define I2C_SDA_GET P0 & 0x02 /* Read I2C SDA (P0.1) */
; #define I2C_SDA_CLR (P0 &= 0xFD) /* Clear I2C SDA */
; #define I2C_SDA_SET (P0 |= 0x02) /* Set I2C_SDA */
;
; /* I2C Data flow Direction Definitions */
; #define I2C_WRITE 0x00 /* Write Direction */
; #define I2C_READ 0x01 /* Read Direction */
;
; /* I2C Acknowledge Definitions */
; #define I2C_ACK 0
; #define I2C_NO_ACK 1
;
; /* FQ1236-MK3 Module Definitions */
; #define TUMER_I2C_ADDRESS 0xC2 /* AS_TU pin (PIN6) is left floating */
; #define IF_I2C_ADDRESS 0x86 /* AS_IF pin (PIN10) is open */
;
; /* I2C functions */
; /* Generate the start condition */
; void I2C_Start();
; /* Generate the stop condition */
; void I2C_Stop();
; /* Master send a byte to the slave device */
; void I2C_Send_Byte(unsigned char byte);
; /* Master send the slave address */
; void I2C_Send_Addr(unsigned char addr, unsigned char dir);
; /* Master send the data to the slave device */
; #define I2C_Send_data I2C_Send_Byte
; /* Master get a byte from the slave device */
; //unsigned char I2C_Get_Byte();
; /* Master get the data from the slave device */
; //unsigned char I2C_Get_Data();
; /* Hold the voltage level of the signal */
; data unsigned char counter;
; void I2C_NOP();
;
; /* Tuner functions */
; /* Tuner Section Programming (Write Mode) */
; void tuner_write();
; /* Tuner data array */
; data unsigned char tuner_data[5]; /* |DB1|DB2|CB|BB|AB| */
;
; /* Generate the start condition */
; void I2C_Start()
RSEG ?PR?I2C_Start?MAIN
I2C_Start:
USING 0
; SOURCE LINE # 53
; {
; SOURCE LINE # 54
; I2C_SDA_SET;
; SOURCE LINE # 55
ORL P0,#02H
; I2C_SCL_SET;
; SOURCE LINE # 56
ORL P0,#01H
; I2C_NOP();
; SOURCE LINE # 57
ACALL I2C_NOP
; I2C_SDA_CLR;
; SOURCE LINE # 58
ANL P0,#0FDH
; I2C_NOP();
; SOURCE LINE # 59
ACALL I2C_NOP
; I2C_SCL_CLR;
; SOURCE LINE # 60
ANL P0,#0FEH
; I2C_NOP();
; SOURCE LINE # 61
AJMP I2C_NOP
; END OF I2C_Start
; }
;
; /* Generate the stop condition */
; void I2C_Stop()
RSEG ?PR?I2C_Stop?MAIN
I2C_Stop:
USING 0
; SOURCE LINE # 65
; {
; SOURCE LINE # 66
; I2C_SCL_CLR;
; SOURCE LINE # 67
ANL P0,#0FEH
; I2C_SDA_CLR;
; SOURCE LINE # 68
ANL P0,#0FDH
; I2C_NOP();
; SOURCE LINE # 69
ACALL I2C_NOP
; I2C_SCL_SET;
; SOURCE LINE # 70
ORL P0,#01H
; I2C_NOP();
; SOURCE LINE # 71
ACALL I2C_NOP
; I2C_SDA_SET;
; SOURCE LINE # 72
ORL P0,#02H
; I2C_NOP();
; SOURCE LINE # 73
AJMP I2C_NOP
; END OF I2C_Stop
; }
;
; /* Master send a byte to the slave device */
; void I2C_Send_Byte(unsigned char byte)
RSEG ?PR?_I2C_Send_Byte?MAIN
_I2C_Send_Byte:
USING 0
; SOURCE LINE # 77
MOV byte?240,R7
; {
; SOURCE LINE # 78
; unsigned char mask;
;
; /* Send the byte from MSB to LSB */
; for (mask = 0x80 ; mask > 0 ; mask = mask >> 1 )
; SOURCE LINE # 82
MOV mask?241,#080H
?C0003:
MOV A,mask?241
SETB C
SUBB A,#00H
JC ?C0004
; {
; SOURCE LINE # 83
; if (byte & mask)
; SOURCE LINE # 84
MOV A,byte?240
ANL A,mask?241
JZ ?C0006
; I2C_SDA_SET;
; SOURCE LINE # 85
ORL P0,#02H
SJMP ?C0007
?C0006:
; else
; I2C_SDA_CLR;
; SOURCE LINE # 87
ANL P0,#0FDH
?C0007:
;
; I2C_SCL_SET;
; SOURCE LINE # 89
ORL P0,#01H
; I2C_NOP();
; SOURCE LINE # 90
ACALL I2C_NOP
; I2C_SCL_CLR;
; SOURCE LINE # 91
ANL P0,#0FEH
; }
; SOURCE LINE # 92
MOV A,mask?241
CLR C
RRC A
MOV mask?241,A
SJMP ?C0003
?C0004:
;
; /* Check the Acknowledge from slave device */
; I2C_SDA_SET;
; SOURCE LINE # 95
ORL P0,#02H
; I2C_SCL_SET;
; SOURCE LINE # 96
ORL P0,#01H
; I2C_NOP();
; SOURCE LINE # 97
ACALL I2C_NOP
; I2C_SCL_CLR;
; SOURCE LINE # 98
ANL P0,#0FEH
; I2C_NOP();
; SOURCE LINE # 99
AJMP I2C_NOP
; END OF _I2C_Send_Byte
; }
;
; /* Master send the slave address */
; void I2C_Send_Addr(unsigned char addr, unsigned char dir)
RSEG ?PR?_I2C_Send_Addr?MAIN
_I2C_Send_Addr:
USING 0
; SOURCE LINE # 103
;---- Variable 'dir?343' assigned to Register 'R5' ----
;---- Variable 'addr?342' assigned to Register 'R7' ----
; {
; SOURCE LINE # 104
; I2C_Send_Byte(addr + dir);
; SOURCE LINE # 105
MOV A,R7
ADD A,R5
MOV R7,A
AJMP _I2C_Send_Byte
; END OF _I2C_Send_Addr
; }
; /* Master get a byte from the slave device */
; #if 0
; unsigned char I2C_Get_Byte()
; {
; unsigned char mask;
; unsigned char retVal;
;
; I2C_SDA_SET; /* configure the pin for input */
; retVal = 0; /* initial the return value */
;
; for (mask = 0x80 ; mask != 0 ; mask = mask >> 1)
; {
; I2C_NOP();
; I2C_SCL_SET;
; if(I2C_SDA_GET)
; retVal = retVal | 1;
; I2C_NOP();
; I2C_SCL_CLR;
; }
;
; I2C_SDA_SET; /* No Acknowledge */
; I2C_NOP();
; I2C_SCL_SET;
; I2C_NOP();
; I2C_SCL_CLR;
;
; return retVal;
; }
; #endif
; /* Master get the data from the slave device */
; #if 0
; unsigned char I2C_Get_Data()
; {
; return I2C_Get_Byte();
; }
; #endif
;
; /* Hold the voltage level of the signal */
; void I2C_NOP()
RSEG ?PR?I2C_NOP?MAIN
I2C_NOP:
USING 0
; SOURCE LINE # 145
; {
; SOURCE LINE # 146
; counter = 0;
; SOURCE LINE # 147
CLR A
MOV counter,A
; }
; SOURCE LINE # 148
RET
; END OF I2C_NOP
;
; /* Tuner Section Programming (Write Mode) */
; /* |S|ADB(W)|A|DB1|A|DB2|A|CB|A|BB|A|AB|A|P| */
; void tuner_write()
RSEG ?PR?tuner_write?MAIN
tuner_write:
USING 0
; SOURCE LINE # 152
; {
; SOURCE LINE # 153
; I2C_Start();
; SOURCE LINE # 154
ACALL I2C_Start
; I2C_Send_Addr(TUMER_I2C_ADDRESS, I2C_WRITE);
; SOURCE LINE # 155
CLR A
MOV R5,A
MOV R7,#0C2H
ACALL _I2C_Send_Addr
; I2C_Send_data(tuner_data[0]); /* DB1 */
; SOURCE LINE # 156
MOV R7,tuner_data
ACALL _I2C_Send_Byte
; I2C_Send_data(tuner_data[1]); /* DB2 */
; SOURCE LINE # 157
MOV R7,tuner_data+01H
ACALL _I2C_Send_Byte
; I2C_Send_data(tuner_data[2]); /* CB */
; SOURCE LINE # 158
MOV R7,tuner_data+02H
ACALL _I2C_Send_Byte
; I2C_Send_data(tuner_data[3]); /* BB */
; SOURCE LINE # 159
MOV R7,tuner_data+03H
ACALL _I2C_Send_Byte
; I2C_Send_data(tuner_data[4]); /* AB */
; SOURCE LINE # 160
MOV R7,tuner_data+04H
ACALL _I2C_Send_Byte
; I2C_Stop();
; SOURCE LINE # 161
AJMP I2C_Stop
; END OF tuner_write
; }
;
; void main ()
RSEG ?PR?main?MAIN
main:
USING 0
; SOURCE LINE # 164
; {
; SOURCE LINE # 165
; unsigned char i, j;
; unsigned char channel = 11;
; SOURCE LINE # 167
MOV channel?646,#0BH
?C0012:
;
; while(1) {
; SOURCE LINE # 169
; switch (channel) {
; SOURCE LINE # 170
MOV A,channel?646
ADD A,#0FBH
JZ ?C0017
ADD A,#0FCH
JZ ?C0018
ADD A,#0FEH
JZ ?C0016
ADD A,#04H
JNZ ?C0014
;
; /*
; NTSC USA, fVIF = 45.75MHz, fss = 62.5KHz
; Test Cable Channel 7, fRF = 175.25MHz, TV Mid Band
; */
; case 7:
; SOURCE LINE # 176
?C0015:
; tuner_data[0] = 0x0D; // DB1
; SOURCE LINE # 177
MOV tuner_data,#0DH
; tuner_data[1] = 0xD0; // DB2
; SOURCE LINE # 178
MOV tuner_data+01H,#0D0H
; tuner_data[2] = 0xCE; // CB
; SOURCE LINE # 179
; tuner_data[3] = 0x02; // BB
; SOURCE LINE # 180
; tuner_data[4] = 0x20; // AB
; SOURCE LINE # 181
; #if M_EN
; channel = 11;
; #endif
; break;
; SOURCE LINE # 185
SJMP ?C0030
;
; /*
; Test Cable Channel 11, fRF = 199.25MHz, TV Mid Band
; */
; case 11:
; SOURCE LINE # 190
?C0016:
; tuner_data[0] = 0x0F; // DB1
; SOURCE LINE # 191
MOV tuner_data,#0FH
; tuner_data[1] = 0x50; // DB2
; SOURCE LINE # 192
MOV tuner_data+01H,#050H
; tuner_data[2] = 0xCE; // CB
; SOURCE LINE # 193
?C0029:
; tuner_data[3] = 0x02; // BB
; SOURCE LINE # 194
; tuner_data[4] = 0x20; // AB
; SOURCE LINE # 195
; #if M_EN
; channel = 5;
; #endif
; break;
; SOURCE LINE # 199
SJMP ?C0030
;
; /*
; Test Cable Channel 5 , fRF = 77.25MHz, TV Low Band
; (77.25 + 45.75) * 1000 / 62.5
; */
; case 5:
; SOURCE LINE # 205
?C0017:
; tuner_data[0] = 0x07; // DB1
; SOURCE LINE # 206
MOV tuner_data,#07H
; tuner_data[1] = 0xB0; // DB2
; SOURCE LINE # 207
MOV tuner_data+01H,#0B0H
; tuner_data[2] = 0xCE; // CB
; SOURCE LINE # 208
MOV tuner_data+02H,#0CEH
; tuner_data[3] = 0x01; // BB
; SOURCE LINE # 209
MOV tuner_data+03H,#01H
; tuner_data[4] = 0x20; // AB
; SOURCE LINE # 210
; #if M_EN
; channel = 9;
; #endif
; break;
; SOURCE LINE # 214
SJMP ?C0031
;
; /*
; Test Cable Channel 9 , fRF = 187.25MHz, TV Mid Band
; (187.25 + 45.75) * 1000 / 62.5
; */
; case 9:
; SOURCE LINE # 220
?C0018:
; tuner_data[0] = 0x0E; // DB1
; SOURCE LINE # 221
MOV tuner_data,#0EH
; tuner_data[1] = 0x90; // DB2
; SOURCE LINE # 222
MOV tuner_data+01H,#090H
; tuner_data[2] = 0xCE; // CB
; SOURCE LINE # 223
?C0030:
MOV tuner_data+02H,#0CEH
; tuner_data[3] = 0x02; // BB
; SOURCE LINE # 224
MOV tuner_data+03H,#02H
; tuner_data[4] = 0x20; // AB
; SOURCE LINE # 225
?C0031:
MOV tuner_data+04H,#020H
; #if M_EN
; channel = 7;
; #endif
; break;
; SOURCE LINE # 229
;
; }
; SOURCE LINE # 231
?C0014:
;
; tuner_write();
; SOURCE LINE # 233
ACALL tuner_write
;
; for (i = 0 ; i < 50 ; i++)
; SOURCE LINE # 235
CLR A
MOV i?644,A
?C0019:
; I2C_NOP();
; SOURCE LINE # 236
ACALL I2C_NOP
INC i?644
MOV A,i?644
CLR C
SUBB A,#032H
JC ?C0019
?C0020:
;
; tuner_write();
; SOURCE LINE # 238
ACALL tuner_write
;
; for (i = 0 ; i < 255 ; i++)
; SOURCE LINE # 240
CLR A
MOV i?644,A
?C0022:
MOV A,i?644
CLR C
SUBB A,#0FFH
JNC ?C0012
; for (j = 0 ; j < 255; j++)
; SOURCE LINE # 241
;---- Variable 'j?645' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0025:
; I2C_NOP();
; SOURCE LINE # 242
ACALL I2C_NOP
INC R7
CJNE R7,#0FFH,?C0025
?C0024:
INC i?644
SJMP ?C0022
; END OF main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -