ch559怎么烧程序

ch559怎么烧程序,第1张

CH559 是沁恒公司升余生产的 8 位增强型新一代 51 内核单片机,相比传统的 8051 使用了较多新的技术。

以下新技术为传统 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程序结束

=========================================================

我就是逐句解释了一下,至于程序要实现什么功能纤和,我就不清楚了,要跟硬件相关


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12458213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存