锦锐单片机CA51F003单片机,有2路uart和ADC

深圳市锦锐科技股份有限公司_电子电工 (cachip.com.cn)

CA51F003 系列芯片是基于 1T 8051 内核的 8 位微控制器,通常情况下,运行速度比传统的 8051 芯片快 10倍,性能更加优越。内置 18K Flash 程序存储器,可多次重复编程的特性,给用户开发带来了极大的方便。

不仅保留了传统 8051 芯片的基本特性,还集成了 12Bit ADC、16 Bit PWM、UART、I²C、运放以及低电压检测(LVD)等功能模块,并支持在线仿真功能。支持 IDLE、STOP 和低速运行三种省电模式以适应不同功耗要求的应用,广泛应用于消费类电子和家电产品。

芯片成本1元

CA51F003S4

产品概述

内核 工作电压

● CPU:1T 8051,最高速度比传统8051快10倍 ● 工作电压:1.8 - 5.5V宽电压工作范围

● 兼容8051指令集, 双DPTR工作模式


存储器 中断系统

● Flash: 18K 字节,支持多次重复擦写 ● 15 个有效中断源

● Flash可划分为程序空间和数据空间 ● 两级中断优先级,支持中断嵌套

● 数据空间可用于存储掉电需要保存的数据,可省略EEPROM ● 10 个外部中断源,每个中断可配置任意信号引脚作为中断输入脚

● RAM:256字节内部RAM,1024K字节外部RAM


时钟系统 通用输入输出口(GPIO)

● 内置低速RC振荡器:131KHz ● 最多支持 18 个GPIO口,支持推挽、开漏、强上拉、

● 内置高速 RC 振荡器:16MHz ( 精度可达 ±1%@3.3V/25℃) 弱上拉、强下拉、弱下拉、高阻模式

● 外部高速振荡器:1 - 24MHz ● 推挽模式下可设置不同驱动强度和翻转速度

● 外部时钟输入:1 - 24MHz


模/数转换器( ADC) 通用串行接口(UART0/UART1)

● 最多支持 12 通道 12 位 SAR ADC(型号不同会有不同) ● 支持 2 个UART接口

● 支持 3 种基准电压源:VDD、内部基准、外部基准 ● 支持 1 字节接收缓存

● 选择内部电压为基准电压时可测量 VDD 电压

● 支持可设置的比较器模式

● 内置运放,支持检测信号缩小功能,缩小倍数可选

● ADC 可直接检测运放 A 输出

● ADC 可与 PWM 结合使用,由 PWM 中断启动 ADC 转换


PWM 运放(AMP)

● 支持 6 通道 PWM,在 16 位范围内可任意配置周期和占空比 ● 运放 A 内置校正机制,校正后全温条件下失调电压小于 0.5mV

● PWM0~PWM5 可选择任意 IO 引脚作为 PWM 输出引脚 ● 运放 B 专用于无线充通信解码

● 支持互补模式和死区控制,可用于驱动直流无刷电机

● 支持可设置边沿对齐和中心对齐模式

● 支持软件刹车及硬件刹车

● 支持 PWM 暂停功能

● 支持可直接输出内部时钟功能

● 支持 PWM 中断


复位模式 定时器

● 芯片支持多种复位源:硬复位,软复位,看门狗复位,低电 ● 3个16位通用定时器: 定时器0,定时器1,定时器2

压检测复位,上电/掉电复位


低电压检测(LVD) 看门狗

● 可配置四档触发电压 2.0V、2.7V、3.7V 和 4.4V ● 27位看门狗定时器,16位调节精度,可配置看门狗复位或中断

● 可设置低电压复位或中断


I2C接口 SPI接口

● 内置1路I2C接口,支持主从模式,支持标准/快速/高速模式 ● 内置 1 个 4 线 SPI 接口,支持主从模式


乘除法器(MDU) TMC功能

● 支持 1 个时钟周期 16 位 × 16 位乘法 ● 时钟源为内置低速 RC 振荡器,中断时间最小单位为 512 个低速 RC 振荡器

● 支持 8 个时钟周期 32 位 ÷ 32 位除法 时钟周期

● 支持 1 个时钟周期 32 位数据左右移位操作 ● 可配置中断时间为 1-256 个最小单位时间


低功耗 程序下载和仿真

● STOP模式,电流<10uA ● 支持ISP和IAP

● IDLE模式,电流<15uA ● 支持在线仿真功能

● 低速运行模式,电流<30uA

封装形式:SOP20

参数

CA51F003单片机

串口和ADC演示代码:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453


// main.c


//


#include <stdio.h>


#include "basicType.h"





#include "ca51f003_config.h"





#include "ca51f003sfr.h"


#include "ca51f003xsfr.h"


#include "gpiodef_f003.h"


#include "system_clock.h"





#include "uart.h"


#include "timer.h"


#include "adc.h"





// RAM/FLASH : 1024+256 / 18KB





extern u32 g_sysTick;


extern xdata FrameOut g_fo1;


extern xdata FrameOut g_fo2;





u16 g_AD_Value;


u16 g_AD_Smpl = 0;


void main(void)


{


	u8 buff[32];


	u8 sz;


#ifdef LVD_RST_ENABLE


	LVDCON = 0xE0;


#endif





	initTmr0();





	initUart1();


	initUart2();





	initADC();





	EA = 1;





	P00F = OUTPUT; //


	P10F = OUTPUT; //





	// uart1write("ddd\n", 4);





	int tnext = 50;


	volatile int rounds = 0;


	while (1)


	{


		if (g_sysTick > tnext)


		{


			P00 = !P00;


			tnext = g_sysTick + 50;


			rounds++;





			sz = sprintf(buff, "uart1:%d ;", rounds);


			uart1write(buff, sz);


			sz = sprintf(buff, "smplc:%u;", g_AD_Smpl);


			uart1write(buff, sz);


			sz = sprintf(buff, "adc:%u\n", g_AD_Value);


			uart1write(buff, sz);





			sz = sprintf(buff, "uart2:%d\n", rounds);


			uart2write(buff, sz);


		}


	}


}





void isr_tmr0() __interrupt 1


{


	TH0 = TH_VAL;


	TL0 = TL_VAL;


	g_sysTick++;





	if (g_sysTick % 17 == 0)


	{


		// P10 = !P10;


	}


}





void isr_uart1(void) __interrupt 6


{


	if (S1CON & 0x01) // read coming byte


	{


		S1CON |= 0x01;


		u8 c = S1BUF;


	}





	if (S1CON & 0x02) // write byte in buffer out


	{


		S1CON |= 0x02;





		if (g_fo1.sz)


		{


			S1BUF = g_fo1.arr[g_fo1.inextout++];


			g_fo1.inextout &= 0x7f;


			g_fo1.sz--;


		}


		else


		{


			g_fo1.inextin = 0;


			g_fo1.inextout = 0;


			g_fo1.isrunning = 0;


		}


	}


}





void isr_uart2(void) __interrupt 8


{


	if (S2CON & 0x01) // read coming byte


	{


		S2CON |= 0x01;


		u8 c = S2BUF;


	}





	if (S2CON & 0x02) // write byte in buffer out


	{


		S2CON |= 0x02;





		if (g_fo2.sz)


		{


			S2BUF = g_fo2.arr[g_fo2.inextout++];


			g_fo2.inextout &= 0x7f;


			g_fo2.sz--;


		}


		else


		{


			g_fo2.inextin = 0;


			g_fo2.inextout = 0;


			g_fo2.isrunning = 0;


		}


	}


}





void isr_adc(void) __interrupt 7


{


	if (ADCON & ADIF)


	{


		ADCON |= ADIF;


		//清中断标志


		g_AD_Value = ADCDH * 256 + ADCDL;


		//读取 AD 值


		g_AD_Value >>= 4;


		ADCON |= AST(1);


		//启动下一次 AD 转换





		P10 = !P10;


		g_AD_Smpl++;


	}


}