📄 text1.lst
字号:
C51 COMPILER V8.02 TEXT1 09/08/2008 08:59:36 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /////////////////////////////////////
2 // Generated Initialization File //
3 /////////////////////////////////////
4
5 #include "C8051F120.h"
6 #include<stdio.h>
7 #include<string.h>
8
9 #define UART_BUF_LEN 40 //数据缓冲长度
10 unsigned char UART_R_COUNT=0,UART_T_COUNT=0,R_OK=0,T_OK=0,U_STR_LEN=0;
11 unsigned char SBUF_temp=0;
12 unsigned char UART_BUF[UART_BUF_LEN];
13 unsigned char str1[]={" I love you ,China ! Come on ! Beijing ! "};
14
15 sbit CS1=P3^0;
16 sbit WP1=P3^1;
17 sbit RDY1=P3^2;
18 sbit RST1=P3^3;
19
20 sbit CS2=P3^4;
21
22 unsigned char spi_flag=1;
23
24 // Peripheral specific initialization functions,
25 // Called from the Init_Device() function
26
27 void Reset_Sources_Init() //复位源设置
28 {
29 1 EA=0; //关总中断
30 1 WDTCN = 0xDE; //关看门狗
31 1 WDTCN = 0xAD;
32 1 }
33
34 void Timer_Init() //定时器设置
35 {
36 1 SFRPAGE = TIMER01_PAGE;
37 1
38 1 TMOD = 0x20; //定时器1:8位自动重载
39 1 CKCON = 0x10; //定时器1使用系统时钟
40 1 TL1 = 0xF3; //波特率设为115200
41 1 TH1 = 0xF3;
42 1 TR1 = 1; //起动定时器1 TCON=0x40;
43 1 }
44
45 void UART_Init() //串口设置
46 {
47 1 SFRPAGE = UART0_PAGE;
48 1 SCON0 = 0x50; //UART0工作在方式1,8位可变波特率,允许接收中断 REN0=1;
49 1 SSTA0 = 0x10; //禁止2分频,发送、接收时钟都由定时器1产生
50 1 }
51
52 void SPI_Init()
53 {
54 1
55 1 SFRPAGE = SPI0_PAGE;
C51 COMPILER V8.02 TEXT1 09/08/2008 08:59:36 PAGE 2
56 1 SPI0CFG = 0x77; //(CKPOL=1, CKPHA=1),SCK 在空闲状态时处于高电平,在SCK 周期的第一个边沿采样数据,
57 1 SPI0CKR = 0x01; //时钟频率为5MHz
58 1 SPI0CN = 0x07; //3 线单主方式,使能SPI0
59 1
60 1 }
61
62
63 void Port_IO_Init() //交叉开关设置
64 {
65 1 SFRPAGE = CONFIG_PAGE;
66 1 P0MDOUT = 0x14;
67 1 P3MDOUT = 0xFF;
68 1 XBR0 = 0x06; //使能UART0和SPI0
69 1 XBR2 = 0x40; //交叉开关总使能
70 1 }
71
72 void Oscillator_Init() //时钟设置
73 {
74 1 int i = 0;
75 1 SFRPAGE = CONFIG_PAGE;
76 1 OSCXCN = 0x67;
77 1 for (i = 0; i < 3000; i++); // Wait 1ms for initialization
78 1 while ((OSCXCN & 0x80) == 0);
79 1 OSCICN = 0x83;
80 1 CLKSEL = 0x01;
81 1
82 1 //SFRPAGE = CONFIG_PAGE;
83 1 //OSCICN = 0x83; //使用内部24。5M时钟,不分频
84 1 }
85
86 void Interrupts_Init() //中断使能设置
87 {
88 1 ES0=1; //1:开放串口中断
89 1 //EIE1 = 0x01; //开放SPI0中断
90 1 EA=1; //开放总中断
91 1 }
92
93 // Initialization function for device,
94 // Call Init_Device() from your main program
95 void Init_Device(void)
96 {
97 1 Reset_Sources_Init(); //复位源设置
98 1 Port_IO_Init(); //交叉开关设置
99 1 Oscillator_Init(); //时钟设置
100 1 Timer_Init(); //定时器设置
101 1 UART_Init(); //串口设置
102 1 SPI_Init(); //SPIO设置
103 1 Interrupts_Init(); //中断使能设置
104 1 }
105
106
107 void delay1ms(int time)
108 {
109 1 int i,j;
110 1 for (j = time;j > 0; j--)
111 1 for (i = 0; i < 2999; i++); // Wait 1ms for initialization
112 1 }
113
114 void send_UART_char( unsigned char ch)
115 {
116 1 SBUF0=ch;
117 1 while(TI0==0);
C51 COMPILER V8.02 TEXT1 09/08/2008 08:59:36 PAGE 3
118 1 TI0=0;
119 1 }
120
121 //向串口发送一个字符串,strlenth为该字符串长度,str_start为发送字符串的起始位置,
122 void send_UART_string(unsigned char *str,unsigned int str_start)
123 {
124 1 unsigned char k=0;
125 1 unsigned int strlenth=0;
126 1 ES0=0; //关串口中断
127 1 strlenth=strlen(str); //计算字符串长度
128 1 k=str_start;
129 1 do
130 1 {
131 2 send_UART_char(*(str+k));
132 2 k++;
133 2 }while(k<strlenth);
134 1 ES0=1; //关串口中断
135 1 }
136
137
138
139
140 void UART0_interrpt() interrupt 4 using 2 //c8051f12x数据手册第130页
141 {
142 1 if(RI0==1)
143 1 {
144 2 UART_BUF[UART_R_COUNT]=SBUF0;
145 2 RI0=0;
146 2 UART_R_COUNT++;
147 2 if(UART_R_COUNT==U_STR_LEN)
148 2 {
149 3 REN0=0; //UART 接收禁止
150 3 R_OK=1;//接收满
151 3 UART_R_COUNT=0;//接收计数复位
152 3 }
153 2 }
154 1 if(TI0==1)
155 1 {
156 2 TI0=0;
157 2 UART_T_COUNT++;
158 2 if(UART_T_COUNT==U_STR_LEN)
159 2 {
160 3 REN0=1; //UART 接收允许
161 3 T_OK=1; //发送完成
162 3 UART_T_COUNT=0;//发送计数复位
163 3 }
164 2
165 2 }
166 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -