以下新技术为传统 8051 没有的:
锁相环(PLL) —— 可以实现非整数倍的频率调整,可以对外输出需要时钟信号
内置晶振 —— 内置 12MHz 晶振,可以简化电路设计,也可以使用外接晶振
USB 控制器和收发器 —— 可以实现 USB 通讯,产品可以使用 U 盘更新固件
SPI 控制器 —— 可以实现 SPI 通信,支持 SD-CARD 等 SPI 设备
ADC 模数转换 —— 支持 10 位或者 11 位 模数转化,最高 1Msps 采样率
LED-CTRL —— 支持 LED 屏控制卡接口
GPIO —— 可选多种模式,开漏或强推挽,上拉或者不上拉电阻
ID —— 内置 ID,可用于程序保密
可以看到 CH559 的功能还是十分强大的,基本上可以满足常用的功能而不需要外挂芯片。
这里以 CH558&9L MINIEVT 这块板子为例,介绍 CH559 的使用方法。
(CH558 与 CH559细节上非常类似,多数代码可以通用)
沁恒的芯片下载程序为 WCHISPTOOL,使用起来比较简单,支持 USB 和串口下载两种方式,当然首先要将 WCH 芯片支持库添加到 Keil 软件中去,之后在 Keil 就可以使用 WCH 系列的芯片了。
在这里,作为开始,新建工吵蠢滚程并编写一个简单的程序来测试一下单片机输出:
在 Keil 里有这么一个函数 _nop_(),它可以让 CPU 空转一个周期。
编写测试代码,并编译,打开配置设置里的 hex 文件输出选项,下载需使用 hex 文件。
然后下载 hex 文件到实验板
注意:首先选择正确的芯片系列,选择正确的芯片型号,勾选“下载完成后运行目标程序”(如果不勾选就要在下载程序后按复位按键,手动运行程序),选择需档野要下载的 hex 文件。
在点击 WCHISPTOOL 的下载按钮前需要正确的连接 USB 设备,具体方法是按住开发板上的下载按钮不送,关闭实验板电源,然后给实验板上电,这是可以听到 PC 设备管理器的声音提示,WCHISPTOOL 内部的 USB 设备列表会显示出实验板上的芯片。
点击软件上的下载按钮,程序下载会在下载记录内部输出一些信息。
将 P1^0 逻辑分析仪与逻辑分析仪连接,逻辑分析仪的输出如下:
嗯~ o( ̄▽ ̄)o,初次 CH559 的实验结束。由上图可以看到,使用 10个 nop(),方波显示的还可以,高电平的部分之比低电平的部分仅仅短了不到一个 1us。
其实可以不用1N4148和300欧电阻的。
关扰樱埋键是CH340的供电很重要,必须在芯片的电源引脚上加100uf电解电容和一个104的片电容。
你说:在USB电源处加了一个100uf电容,这个电容在什么位置,是不是就在CH340的电源引脚上,离颂信远了就不起作用了。
还有:下载最新版本的STC-ISP软件,可以时刻观察CH340的串口状态。缓蚂
见下图,画红圈的那项:串口号,是否在点“下载/编程”的时候断了一会,就是没有CH340了。必须保证时刻都不能断的。
还有,下载的最高波特率可以选低一点的,这样就可以保证下载可靠了。
ORG 00H 程序初始地址SJMP STAR 跳转到STAR
ORG 1BH 定时器T1的中断向量地址
SJMP T1S 跳转到T1S
ORG 30H 程序地址30H,即STAR标号地址
STAR: MOV R2,#99将十进制数99送入R2中
MOV R4,#20将十进制数20送入R4中
MOV IE,#88H 开启EA和ET1
MOV TMOD,#10H 使用T1的工作方式1
MOV TH1,#3CH 给T1赋初值,这里是定时50ms
MOV TL1,#0B0H
SETB TR1 开启T1
MOV A,R2 将R2中的值送入A中
MOV B,#10 将十进制数10送入B中
DIV AB将A中的数除以B中的数,商在A中,余数在B中
ACALL SEG7调用SEG7
MOV P1,A 将A中值送入P1
MOV A,B 将B中值送入A
ACALL SEG7调用SEG7
MOV P2,A 将A中值送入P2
SJMP $死循环,等待中断
SJMP STAR
T1S: MOV TH1,#3CH 中断程序,重新赋初值T1 50ms
MOV TL1,#0B0H
DJNZ R4,T1S0 R4中值先减1再看是否为0,若不为0则跳转到T1S0,若为0则顺枝滚序往下执行
MOV R4,#20给R4重新赋值十进制数20,因此定时时间应该为1秒
DJNZ R2,T1S1 R2中值先减1再看是否为0,若不为0则跳转到T1S1,若为0则顺序往下执行
/*CLR TR1*/
SJMP T1S1 跳转到T1S1
T1S0: RETI 中断返毁搭盯回
T1S1: MOV A,R2 将R2中的值送入A中
MOV B,#10 将十进制数10送入B中
DIV AB将A中的数除以B中的数,商在A中,余数在B中
ACALL SEG7调用SEG7
MOV P1,A 将A中值送入P1
MOV A,B 将B中值送入A
ACALL SEG7调用SEG7
MOV P2,A 将A中值送入P2
CJNE R2,#0,T1S2 将R2中的值与十进制数0比较,若为0则跳转到T1S2,否则顺序执行
MOV R2,#100 给R2赋十进制数100
T1S2: RETI 中断返回
SEG7: INC A A中的值加1
MOVC A,@A+PC 先将PC中的值加1,然后与A相加,然后以此值为地址,将该地址中的数据送入A中
RET 返回
DB 0C0H,0F9H,0A4H,0B0H数据
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
END程序结束
=========================================================
我就是逐句解释了一下,至于程序要实现什么功能纤和,我就不清楚了,要跟硬件相关
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)