文档库 最新最全的文档下载
当前位置:文档库 › 单片机各种开发小程序

单片机各种开发小程序

单片机各种开发小程序
单片机各种开发小程序

LJMP $

END

五、思考题

如何将存储器块的内容置成某固定值(例全填充为0FFH)? 请用户修改程序,完成此操作。

实验二二进制与BCD码转换

一、实验目的

1.掌握简单的数值转换算法

2.基本了解数值的各种表达方法

二、实验说明

单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一字节二进制数,转换成二十进制(BCD)码。将累加器A的值拆为三个BCD 码,并存入RESULT开始的三个单元,例程A赋值#123。

三、实验内容及步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH

2.ASM源程序进行编译,编译无误后,全速运行程序,打开View菜单中的Memory Window,在Address窗口输入D:30H后回车,点击运行按钮,观察地址30H、31H、32H的数据变化,30H内容将更新为01,31H更新为02,32H更新为03。修改源程序中给累加器A的赋值,重复实验,观察实验效果。

2.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

RESULT EQU 30H

ORG 0000H

LJMP START

BINTOBCD:

MOV B,#100

DIV AB

MOV RESULT,A ;除以100得百位数

MOV A,B

MOV B,#10

DIV AB

MOV RESULT+1,A ;余数除以10得十位数

MOV RESULT+2,B ;余数为个位数

RET

START:

MOV SP,#40H

MOV A,#123

CALL BINTOBCD

LJMP $

END

2.流程图

实验三 BCD码与ASCII码转换

一、实验目的

1.了解BCD值和ASCII值的区别

2.掌握用查表的方法将BCD值转换成ASCII值

二、实验说明

此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法可以快速地进行数值转换。进一步掌握数值的各种表达方式。现在我们给出一个BCD数,将其转换成ASCII值。如下:将累加器A的值拆为二个ASCII码,并存入Result开始的二个单元,例程A赋值#1AH。

三、实验内容及步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH3.ASM源程序进行编译,编译无误后,打开View菜单中的Memory Window,在Address窗口输入D:30H后回车,点击运行按钮,观察地址30H、31H的数据变化,30H更新为31,31H更新为41。修改源程序中给累加器A的赋值,重复实验,观察实验效果。

2.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

RESULT EQU 30H

ORG 0

LJMP START

ASCIITAB:

DB ‘0123456789ABCDEF' ;定义数字对应的ASCII表

BCDTOHEX:

MOV DPTR,#ASCIITAB

MOV B, A ;暂存A

SWAP A

ANL A,#0FH ;取高四位

MOVC A,@A+DPTR ;查ASCII表

MOV RESULT, A

MOV A,B ;恢复A

ANL A,#0FH ;取低四位

MOVC A,@A+DPTR ;查ASCII表

MOV RESULT+1,A

RET

START:

MOV SP,#40H

MOV A,#1AH

CALL BCDTOHEX

LJMP $ END

2.流程图

实验四程序跳转表

一、实验目的

1.了解程序的多分支结构

2.掌握多分支结构程序的编程方法

二、实验说明

多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。

三、实验内容及步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH4.ASM源程序进行编译,编译无误后打开View菜单中的Memory Window,在Address窗口输入D:30H后回车,点击运行按钮,观察地址30H、31H、32H、33H的数据变化,30H更新为0,31H 更新为1,32H更新为2,33H更新为3。修改源程序中给30H~33H的赋值,重复实验,观察实验效果。

2.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.流程图

2.源程序

ORG 0

LJMP START

FUNC0: MOV 30H,#0 RET

FUNC1: MOV 31H,#1 RET

FUNC2: MOV 32H,#2

RET

FUNC3: MOV 33H,#3

RET

FUNCENTER:

ADD A,ACC ;AJMP为二字节指令,调用号×2 MOV DPTR,#FUNCTAB

JMP @A+DPTR

FUNCTAB:

AJMP FUNC0

AJMP FUNC1

AJMP FUNC2

AJMP FUNC3

START:

MOV A,#0

CALL FUNCENTER

MOV A,#1

CALL FUNCENTER

MOV A,#2

CALL FUNCENTER

MOV A,#3

CALL FUNCENTER

LJMP $

END

实验五内存块移动

一、实验目的

1.了解内存块的移动方法

2.加深对存储器读写的认识

二、实验说明

块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。本程序是给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动3000H起始的256个字节到4000H起始的256个字节。

三、实验内容及步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加“TH5.ASM”源程序进行编译,编译无误后,打开View菜单中的Memory Window,在Address窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,通过比较,可观察到,3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同,说明存储块已移动。

2.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

ORG 0

MOV DPTR,#3000H

MOV A,#01H

MOV R5,#O

LOOP: MOVX @DPTR,A

INC DPTR

DJNZ R5,LOOP

MOV R0,#30H

MOV R1,#00H

MOV R2,#40H

MOV R3,#00H

MOV R7,#0

LOOP1: MOV DPH,R0

MOV DPL,R1

MOVX A,@DPTR

MOV DPH,R2

MOV DPL,R3

MOVX @DPTR,A

INC R1

INC R3

DJNZ R7,LOOP1

LJMP $

END

2.流程图

五、思考题

1.若源块地址和目标块地址有重叠,该如何避免?

2.请思考给出块结束地址,用地址减一方法移动块的算法。

实验六数据排序

一、实验目的

掌握排序程序的设计方法。

二、实验内容

本例程采用交换排序法将内部RAM 中的50~59H 单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM 1000H开始处。

三、实验步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH6.ASM文件,打开TH6.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORY WINDOW数据窗口,分别观察50H(在MEMORY#1中输入D:50H)、1000H(MEMORY#2窗口输入X:1000H)。

3.可在程序指令NOP 处设置断点,在第一个断点处可观察50~59H 单元内容是否为10 个任意排列原始数据。

4.在第二个断点处可观察每次排序的结果。

5.可单步执行程序观察排序过程。

四、实验参考程序(见光盘中的程序文件夹)

ORG 0000H

JMP MAIN

ORG 0100H

MAIN: MOV R0,#50H

MOV @R0,#5FH

INC R0

MOV @R0,#56H

INC R0

MOV @R0,#5AH

INC R0

MOV @R0,#5EH

INC R0

MOV @R0,#51H

INC R0

MOV @R0,#5BH

INC R0

MOV @R0,#53H

INC R0

MOV @R0,#58H

INC R0

MOV @R0,#57H

INC R0

MOV @R0,#55H ;将10 个随机数送入内部RAM 的50~59H 单元

NOP ;可在此处设置断点

ACALL QUE ;调用排序子程序

OUT: MOV R0,#50H

MOV DPTR,#1000H

MOV R7,#10

OUT1: MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R7,OUT1

HERE: AJMP HERE

NOP ;可在此处设置断点,观察每次排序结果

QUE: CLR 00H ;清交换标志

MOV R1,#50H

MOV R6,#09H

I3: MOV A,R6

MOV R7,A

MOV A,R1

MOV R0,A

MOV A,@R0

I2: INC R0

MOV R2,A

SUBB A,@R0

MOV A,R2

JC I1

SETB 00H

XCH A,@R0

I1: DJNZ R7,I2

JNB 00H,STOP

MOV @R1,A

INC R1

DJNZ R6,I3

RET

END

第二部分单片机硬件实验

实验一 I/O口控制实验

一、实验目的

1.学会使用I/O口的基本输入、输出功能

2.了解开关量输入、输出的接口技术及编程方法

二、实验说明

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据可能是不正确的。本实验用P1口作输入口,P0口作为输出口。

三、实验电路图

本实验需要用到80C51 MCU模块(E区),八位逻辑电平显示模块(D4区)及八位逻辑电平输出模块(D5区)。八位逻辑电平显示电路原理参考图1.1,八位逻辑电平输出电路原理参考图1.2。

图1.1 八位逻辑电平显示电路

图1.2 八位逻辑电平输出电路

四、实验步骤

1.用8P数据线连接80C51 MCU模块的JD1(P1口)到八位逻辑电平输出模块的JD1D5,连接JD0(P0口)到八位逻辑电平显示模块的JD1D4。

2.用USB 数据线连接计算机与实验箱的仿真接口。

3.将80C51 MCU 模块的电源钮子开关S2拨到上端。将直流稳压电源模块的直流控制开关S1打到ON ,本实验所用到的相关模块的电源指示灯VCC 亮。

4.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH1_IO 口.ASM ”源程序,进行编译,编译无误后,全速运行程序。

5.实验现象:K0~K7拨断开关向上拨,对应的发光二极管L0~L7熄灭,否则为点亮。

6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:芯片缺口朝上)。

注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不再重述。 五、实验源程序及流程图 1.源程序

ORG 0000H

LJMP MAIN ORG 0030H

MAIN: MOV P0,#0FFH ;P0口初始化,8个灯全灭

MOV P1,#0FFH ;P1口初始化,设置P1口为输入方式

LOOP: MOV A,P1 ;读P1口数据 MOV P0,A ;送P0口输出 LJMP LOOP END

2.流程图 六、思考题

试用单片机的其他口实现以上功能。

实验二继电器控制实验

一、实验目的

1.学习延时子程序的编写和使用

2.掌握继电器控制的基本方法

3.了解用弱电控制强电的方法

二、实验说明

现代自动控制设备中,都存在一个电子电路的互相连接问题,一方面要使电子电路的控制信号能控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路和电气电路提供良好的电气隔离,以保护电子电路和人身的安全,继电器便能完成这一任务。

继电器电路中一般都要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势。本电路的控制端为高电平时,继电器常开触点吸合,LED灯被点亮,当控制端口为低电平时,继电器不工作。

三、实验电路图

本实验需要用到80C51 MCU模块(E区),八位逻辑电平显示模块(D4区)和继电器控制模块(C1区)。八位逻辑电平显示电路原理参考实验一图1.1,继电器控制电路原理参考图2。

四、实验步骤

1.用二号导线连接80C51 MCU模块的P1.0端到继电器控制模块的Control端,连接继电器控制模块的Open端到八位逻辑电平显示模块的L0端,连接继电器模块的Mid端到直流稳压电源模块的5V端。

2.用USB数据线连接计算机与实验箱的仿真接口。

3.将80C51 MCU模块的电源钮子开关S2拨到上端,将继电器控制模块的电源短路帽JPC1打在上端。将直流稳压电源模块的直流控制开关S1打到ON,本实验所用到的相关模块的电源指示灯VCC亮。

4.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH2_继电器控制.ASM”源程序,进行编译,编译无误后,全速运行程序。

5.实验现象:继电器重复延时吸合与延时断开,同时发光二极管的亮与灭指示继电器的吸合与断开。

6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:芯片缺口朝上)。

五、实验流程图及源程序

1.流程图

用P1.0作为控制输出口,接继电器控制电路,使继电器重复吸合与断开。

OUTPUT BIT P1.0

ORG 0000H

LJMP START

ORG 0030H

START: CLR OUTPUT

CALL DELAY

SETB OUTPUT

CALL DELAY

LJMP START

Delay: MOV R6, #0FFH

MOV R7, #0FFH

MOV R5,#0AH

DLoop: DJNZ R7, DLoop

DJNZ R6, DLoop

DJNZ R5, DLoop

RET

END

六、思考题

1.对于本实验延时子程序

Delay: MOV R6, #0FFH

MOV R7, #0FFH

MOV R5,#0AH

DLoop: DJNZ R7, DLoop

DJNZ R6, DLoop

DJNZ R5, DLoop

本模块使用11.0592MHz晶振,粗略计算此程序的执行时间为多少?

2.如何修改程序,改变继电器的通断时间?

实验三外部中断实验

一、实验目的

1.掌握外部中断技术的基本使用方法

2.掌握中断处理程序的编写方法

二、实验说明

1.外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.1)引入,本实验由INT0(P3.2)引入。

2.中断服务的关键

a.保护进入中断时的状态:堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

b.必须在中断服务程序中设定是否允许中断重入,即设置EX0位。

c.用POP指令恢复中断时的现场。

3.中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

4.中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就进行响应一次中断。

三、实验电路图

本实验用到80C51 MCU模块(E区),八位逻辑电平显示模块(D4区)和单次脉冲模块(D1区)。八位逻辑电平显示模块电路原理参考实验一图1.1,单次脉冲接口电路原理参考图3。

图3 单次脉冲接口电路原理

四、实验步骤

1.用二导线连接80C51 MCU模块的P1.0口到八位逻辑电平显示模块的任一只发光二极管上,连接80C51 MCU模块的INTO(P3.2)到单次脉冲模块的任一输出端。

2.用USB 数据线连接计算机与实验箱的仿真接口。

3.将80C51 MCU 模块的电源钮子开关S2拨到上端。将直流稳压电源模块的直流控制开关S1打到ON ,本实验所用到的相关模块的电源指示灯VCC 亮。

4.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH3_外部中断.ASM ”源程序,进行编译,编译无误后,全速运行程序。

5.实验现象:连续按动单次脉冲产生电路的按键,发光二极管每按一次状态取反,即隔一次点亮。

6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:芯片缺口朝上)。

五、实验流程图及源程序

1.

2.源程序

LED BIT P1.0 LEDBUF BIT 0 ORG 0000H

LJMP START ;跳至主程序 ORG 000BH

LJMP INTERRUPT ;跳子程序

ORG 0030H

INTERRUPT: PUSH PSW

;保护现场

CPL LEDBUF ;取反LED MOV C, LEDBUF MOV LED, C

POP PSW ;恢复现场

主程序框图

外部中断子程序框图

RETI

START: CLR LEDBUF

CLR LED

MOV TCON, #01H ;外部中断0下降沿触发

MOV IE, #81H ;打开外部中断允许位(EX0)及总中断允许位(EA)

LJMP $

END

六、思考题

1.简述中断处理的一般过程。

2.脉冲方式如何防止重复响应外中断。

实验四定时/计数器实验

一、实验目的

1.学习80C51内部定时/计数器使用方法

2.学习计数器各种工作方式的用法

3.进一步掌握中断处理程序的编写方法

二、实验说明

关于内部定时/计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。定时/计数器有关的寄存器有工作方式寄存器TMOD 和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

三、实验电路图

本实验用到80C51 MCU模块(C区),八位逻辑电平显示模块(E5区)和单次脉冲模块(G3区)。八位逻辑电平显示模块电路原理图参考实验一图1.1,单次脉冲模块电路原理参考实验三图3.1。

四、实验步骤

实验(一):计数器

1.用8P数据线连接80C51 MCU模块的P1口到八位逻辑电平显示模块的JD1D4口,用二号导线连接80C51 MCU模块的T0口到单次脉冲模块的任一输出端。

2.用USB数据线连接计算机与实验箱的仿真接口。

3.将80C51 MCU模块的电源钮子开关S2拨到上端。将直流稳压电源模块的直流控制开关S1打到ON,本实验所用到的相关模块的电源指示灯VCC亮。

4.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH4_计数器.ASM”源程序,进行编译,编译无误后,全速运行程序。

5.实验现象:连续按动单次脉冲的按键,8位发光二极管显示按键次数。

6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:芯片缺口朝上)。

实验(二):定时器

1.用二导线连接80C51 MCU模块的P1.0到八位逻辑电平显示模块的任一只发光二极管上。

2.用USB数据线连接计算机与实验箱的仿真接口。

3.将80C51 MCU模块的电源钮子开关S2拨到上端。将直流稳压电源模块的直流控制开关S1打到ON,本实验所用到的相关模块的电源指示灯VCC亮。

4.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH4_定时器.ASM”源程序,进行编译,编译无误后,全速运行程序。

5.实验现象:发光二极管隔一秒点亮一次,点亮时间为一秒。

6.也可以把源程序编译成可执行文件,把可执行文件下载到89S52芯片中运行(注意:芯片缺口朝上)。

五、实验流程图及源程序

1.流程图

定时器流程图

2.源程序 实验(一):计数器

ORG 0000H LJMP START ORG 0030H

START :MOV TMOD ,﹟00000101B ;置T0计数器方式1 MOV TH0

,﹟0 ;置T0初值 MOV TL0,﹟0

SETB TR0 ;T0运行

LOOP : MOV P1,TL0 ;记录P1口脉冲个数 LJMP LOOP ;返回

END

实验(二):定时器

Tick EQU 5000 ; 10000 x 100us = 1s

T100us EQU 156 ; 100us 时间常数(12M) C100us EQU 5H ; 100us 记数单元

主程序框图

单片机产品开发流程12.

详细的单片机开发流程 一、项目评估: 出初步技术开发方案,据此出预算,包括可能的开发成本、样机成本、开发耗时、样机制造耗时、利润空间等,然后根据开发项目的性质和细节评估风险,以决定项目是否落实资金上马。 二、项目实施: 1、设计电原理图: 在做这一步时要考虑单片机的资源分配和将来的软件框架、制定好各种通讯协议, 尽量避免出现当板子做好后, 即使把软件优化到极限仍不能满足项目要求的情况, 还要计算各元件的参数、各芯片间的时序配合, 有时候还需要考虑外壳结构、元件供货、生产成本等因素, 还可能需要做必要的试验以验证一些具体的实 现方法。设计中每一步骤出现的失误都会在下一步骤引起连锁反应, 所以对一些没有把握的技术难点应尽量去核实。 2、设计印刷电路板(PCB 图: 完成电原理图设计后, 根据技术方案的需要设计 PCB 图, 这一步需要考虑机械结构、装配过程、外壳尺寸细节、所有要用到的元器件的精确三维尺寸、不同制 版厂的加工精度、散热、电磁兼容性等等, 为最终完成这一步常常需要几十次回 头修改电原理图。 3、把 PCB 图发往制版厂做板: 将加工要求尽可能详细的写下来与 PCB 图文件一起发电邮给工厂,并保持沟通,及时解决加工中出现的一些相关问题。 4、定购开发系统和元件:

要考虑到开发过程中的可能的损耗, 供货厂商的最小订货量、商业信誉、价格、服务等, 具体工作包括整理购货清单、联系各供货厂商、比较技术参数、下定单、跑银行汇款、传真汇款底单、催货等等。 5、装配样机: PCB板拿到后开始样机装配,设计中的错漏会在装配过程开始显现,尽量去补救。 6、样机调试: 样机初步装好就可以开始调试, 当然需要有软件才能调, 有人说单片机的软件不是编出来而是调出来的, 所以这个过程需要用到电烙铁、刻刀、不同参数的元件、各种调试和仿真软件、样机的模拟工作环境等。常常会因为设计阶段的疏忽而不得不对样机动手术, 等整个调试终于完成之后, 往往样机的板子已经面目全非。 7、整理数据: 到了这一步, 项目开发的大部分工作都已经完成了, 这时候需要将样机研发过程中得到的重要数据记录保存下来,比如更新电原理图里的元件参数、 PCB 元件库里的三维模型, 还要记录暴露出来的设计上的失误、分析失误的原因、采用的补救方案等等。 8、 V1.1 如果项目进入生产阶段或确有需要, 可以根据修正后的技术方案按以上各个步骤重做一台完善的 V1.1版样机。 9、编写设备文档 包括编写产品说明书、拍摄外观图片等, 如果设备需要和电脑通讯, 还得写好与电脑的接口标准和通讯协议说明。

一个单片机小程序编写

一个单片机小程序编写 单片机在家用电器和工业系统中应用广泛,下面给大家介绍一个单片机小程序的编写。 1、设计任务: 如果开关合上,L1亮,开关打开,L1熄灭,如图1所示。监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态。 2、电路原理图: 图1 3、系统板上硬件连线:如图1所示,图中VCC = +5V。 4、程序设计内容: (1)开关状态的检测过程: 开关状态是从单片机的P3.0端口输入信号,当拨开开关K1拨上去(开关断开),即输入高电平;当拨动开关K1拨下去(开关闭合),即输入低电平。可以采用JB BIT,REL 指令来完成对开关状态的检测即可。 (2)输出控制: 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮。我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5、程序框图:如图2所示。

图2 6、汇编源程序的编写: ORG 00H START: JB P3.0,D1 CLR P1.0 SJMP START D1: SETB P1.0 SJMP START END 7、用“keil软件编”写好汇编程序,然后转换成HEX文件并保存。 8、用“增强型A51编程器”把刚才写好的HEX文件烧写入单片机中。 9、把已写入程序的单片机,装入图1的电路,然后通电。当拨动开关K1拨下去(开关闭合),发光二极管L1亮;拨开开关K1拨上去(开关断开),发光二极管L1灭。说明刚才编写的程序达到了我们的设计要求。

如何使用BSL方式给MSP 单片机烧录程序

如何使用BSL方式给MSP430单片机烧录程序 一,使用两个软件:IAR(EW430)和MSP430BSL.exe 二,IAR软件用于编程和编译;BSL软件负责载入烧录。三,在IAR中编程操作: IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年,迄今已有27年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。 国内普及的MSP430开发软件种内不多,主要有IAR公司的Embedded Workbench for MSP430(简称为EW430)和AQ430。 目前IAR的用户居多。IAR EW430软件提供了工程管理,程序编辑,代码下载,调试等所有功能。并且软件界面和操作方法与IAR EW for ARM等开发软件一致。因此,学会了IAR EW430,就可以很顺利地过渡到另一种新处理器的开发工作。 IAR新建工程步骤 Step1:选择主菜单的File >New>Workspace命令,然后开启一个空白工作区窗口 Step2:选择主菜单Project>Create New Project>选择Empty project。点击OK。最好新建一个文件夹,用于放置所有的生成文件。选择保存路径后,点击保存,新工程建立完毕 Step3:file>new>file>编辑代码>save>文件名可以自己起,但后面一定要加 ”.c” ,保存为C文件 Step4: 右击工程名,将写好的程序添加进去Add>Add Files,也可以用Add>Add“main.c”添加入工程。 Step5: 右击工程名,点击Option>General Options>Device>选择MSP430F149 Step6: 继续设置Linker>Output>文件名.txt(这步很关键)>fomat>

单片机考试小程序

编程题 1,清零程序 将片外数据存储器中5000h~500ffh单元全部清零 ORG OOOOH MOV DPTR, #5000H MOV R0,#00H CLR A LOOP: MOVX @DPTR,A INC DPTR DJNZ RO,LOOP HERE: SJMP HERH 2.试着编写程序,查找在内部 RAM的20h~40h单元中出现00h这一数据的次数将查到的结果存入41h单元 ORG 0000H MOV R0,#20H MOV R1,#21H MOV 41H,#00H LOOP: CJNE @RO,#00H,NEXT INC 41H NEXT: INC R0 DJNZ RI,LOOP HERE: SJMP HERE 3查找在内部RAM的30h~50单元中是否有0AAH这一数据,若有则将51H单元置为01H;若未找到;则将51H单元置为00H. ORG 0000H MOV R0,#30H MOV R1,#21H LOOP: CJNE @R0,0AAH,NEXT MOV 51H,#01H SJMP HERE NEXT: INC R0 DJNZ R1,LOOP MOV 51H,#00H HERE: SJMP HERE 4编写程序功能为把1000H开始的外部RAM单元中的数据送到内部RAM50H开始的单元中,数据的个数存放在了内部RAM60H单元。 ORG 0000H MOV DPTR #1000H MOV R0,#50H MOV R1,60H LOOP: MOVX A,@DPTR MOV 50H,A INC DPTR INC R0

DJNZ RI,LOOP HERE: SJMP HERE 5.编写请将ROM3000H单元内容送R7. ORG 0000H MOV DPTR, #3000H CLR A MOVC A ,@A+DPTR MOV R7,A END 6.片外RAM2000H单元内容送到片外RAM1000H的单元中。 ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,,#1000H\ MOVX @DPTR,A 7.锯齿形波: ORG 2000H START: MOV R0,#0FEH MOV A,#00H LOOP: MOVX @R0,A INC A SJMP LOOP 8三角形波 ORG 2000H START MOV R0,#0FEH MOV A,#00H UP: MOVX @R0,A INC A JNZ UP DOWN: DEC A MOVX @DPTR,A JNZ DOWN SJMP UP

单片机程序设计方法总结.doc

单片机程序设计方法总结 程序设计是单片机开发最重要的工作程序设计就是利用单片机的指令系统根据应用系统即目标产品的要求编写单片机的应用程序其实我们前面已经开始这样做过了这一课我们不是讲如何来设计具体的程序而是教您设计单片机程序的基本方法不过在讲解之前还是有必要先了解一下单片机的程序设计语言这里的语言与我们通常理解的语言是有区别的它指的是为开发单片机而设计的程序语言如果 您没有学过程序设计可能不太明白我给大家简单解释一下您知道微软的VB VC 吗VB VC 就是为 某些工程应用而设计的计算机程序语言通俗地讲它是一种设计工具只不过这种工具是用来设计计 算机程序的要想设计单片机的程序当然也要有这样一种工具说设计语言更确切些单片机的设计 语言基本上有三类: 1 .完全面向机器的机器语言 机器语言就是能被单片机直接识别和执行的语言计算机能识别什么以前我们讲过--是数字0 或1 所以机器语言就是用一连串的0 或1 来表示的数字比如MOV A 40H 用机器语言来表示就是 11100101 0100000 很显然用机器语言来编写单片机的程序不太方便也不好记忆我们必须想办法 用更好的语言来编写单片机的程序于是就有了专门为单片机开发而设计的语言 2. 汇编语言 汇编语言也叫符号化语言它使用助记符来代替二进制的0 和1 比如刚才的MOV A40H 就是汇编语言 指令显然用汇编语言写成的程序比机器语言好学也好记所以单片机的指令普遍采用汇编指令来编写 用汇编语言写成的程序我们就叫它源程序或源代码可是计算机不能识别和执行用汇编语言写成的程 序啊怎么办当然有办法我们可以通过翻译把源代码译成机器语言这个过程就叫做汇编,汇编工作现在 都是由计算机借助汇编程序自动完成的不过在很早以前它是靠手工来做的. 值得注意的是:汇编语言也是面向机器的,它仍是一种低级语言每一类计算机都有它自己的汇 编语言比如51 系列有它的汇编语言;PIC 系列也有它的汇编语言微机也有它自己的汇编语言它 们的指令系统是各不相同的也就是说不同的单片机有不同的指令系统它们之间是不通用的,这就

java经典小程序,java入门100例!

1,编写程序,判断给定的某个年份是否是闰年。 闰年的判断规则如下: (1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in); year = scanner.nextInt(); if (year<0||year>3000){ System.out.println("年份有误,程序退出!"); System.exit(0); } if ((year%4==0)&&(year%100!=0)||(year%400==0)) System.out.println(year+" is bissextile"); else System.out.println(year+" is not bissextile "); } } 2,给定一个百分制的分数,输出相应的等级。 90分以上A级 80~89 B级 70~79 C级 60~69 D级 60分以下E级 import java.util.Scanner; class Mark{ public static void main(String[] args){ System.out.println("请输入一个分数"); //定义输入的分数为“mark”,且分数会有小数 double mark; Scanner scanner = new Scanner(System.in); mark = scanner.nextDouble(); //判断是否有输入错误。 if(mark<0||mark>100){

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

单片机基于C语言的编程程序

#include #include #define uchar unsigned char #define uint unsigned int sbit RED_ZHU = P0^0;//对应L1LED 代表主道路红灯sbit YELLOW_ZHU = P0^1;//对应L2LED 代表主道路黄灯sbit GREEN_ZHU = P0^2;//对应L3LED 代表主道路绿灯 sbit RED_ZHI = P0^4;//对应L4LED 代表支道路绿灯sbit YELLOW_ZHI = P0^5;//对应L5LED 代表支道路绿灯sbit GREEN_ZHI = P0^6;//对应L6LED 代表支道路绿灯 /********************************************************* 500ms延时函数 晶振:11.0592MHz *********************************************************/ void delay(unsigned char j) { unsigned char k; unsigned int i; for(;j>0;j--) { for(i=1250;i>0;i--) { for(k=180;k>0;k--); } } } /********************************************************* 主函数 *********************************************************/ main() { uchar t; P0=0xff; P3=0xff; RED_ZHU=0; //第一个状态 RED_ZHI=0; delay(10);

单片机C语言小程序

单片机C语言小程序 #include #include #define V AR XBYTE[0x00] /*V AR为外部位址0000*/ #define read 0 /*93c46读取的识别码READ=0*/ #define write 2 /*93c46写入的识别码WRITE=2*/ #define ewen 4 /*93C46写致能的识别码EWEN=4*/ #define ewds 6 /*93C46写除能的识别码EWDS=6*/ #define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/ #define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/ #define di T0 /*93C46 DI接脚=8051 T1 P3.4*/ #define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/ #define LOW 0x49 /*存放测试温度的下限值*/ #define HIGH 0x51 /*存放测试温度的上限值*/ bit FLAG0=0; /*宣告TIMER0响应旗号*/ //外接工业专用温度传感器时,目前设置测量温度为0-99度: static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/ 0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/ 0xEA,0xEE}; /*100度,110度*/ //使用板上AD590温度传感器时,目前设置测量温度为0-99度: //static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/ // 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/ // 0xba,0xc0}; /*100度,110度*/ char data1[2]; char C,S,k=0; char MEP[7]; /*显示器值存放阵列*/ //MEP[0]=数码管最低位显示值,温度指示小数点后位 //MEP[1]=数码管次低位显示值,温度指示个位数 //MEP[2]=数码管高位显示值,温度指示十位数 //MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5 //MEP[4]= //MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中 unsigned char combuf[10]; unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1; char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0; void delay (unsigned int value) /*延时副程式*/ { while (value!=0) value--; /*10us延时*/ } void COMP(); /*宣告比较现在温度与设定温度副程式*/ void SET();

如何将程序代码烧录进STC单片机

不能用keil作下载,它应该只是一个程序编辑和调试用的吧,用keil生成hex 文件。下载时用专门的下载软件找到生成的那个hex文件就可以下载了。,有专门的单片机烧写软件的。那个软件的名字叫STC-ISP V391(你可以下载个更高版本的)的,你的开发板里面应该自带下载软件的啊! 如果你用的下载下是USB转串口的线的话,你需要安装一个USB转串口驱动才能下载程序。网上搜一下就可以了。如果有光盘的话就在光盘里面找,里面肯定有的。 如何将程序代码烧录进STC单片机 先安装<STC单片机编程工具>软件到计算机中,然后进行下面的操作。 以下是烧录程序的主要界面。烧录过程非常简单,操作也非常简单。图中红色的五个大数字就表示了整个过程。简简单单的五步就可以了(实际上只需4步)。 启动本烧录程序后,第一步就是选择烧录器件。本烧录软件支持STC全系列的51单片机芯片,因此,第一步必须选择相对应的型号。由于本实验板选用的单片机芯片就是本烧录

软件首次启动默认的型号,所以,本项一般都不需要选择。 另外,“AP Memory”是指该芯片的内存大小和起止地址,根据器件型号自动更改,不必理会。 选择了器件型号,第二步就应该选择将要被烧录的HEX机器码文件。HEX文件由单片机开发环境输入、编辑代码,最后编绎产生。

至于如何产生HEX文件,很多资料也都有介绍,本板光盘中有详细的说明,并且提供了多套开发软件(每套都能用)。通过对照自学完全可以很快掌握操作。并且,本实验板光盘也提供了多种单片机开发环境供大家学习研究。 本光盘中提供了一些例子程序,大家可以点“open file”按钮,弹出以下窗口(源程序也有,但这里不显示),先选择一些例子程序烧录实验。 选好了文件后,大家可以发现“文件校验和”中的数据发生了变化,大家可以通过留意这个数据是否变化来确定打开文件是否成功,或者文件刷新是否有更改。 当然,文件打开后,会显示在右边的数据区,大家也可以观查右边数据区是否有更改。不过,当数据太多时,更改的地方又很少时,观查“文件校验和”会更快更准确。 选好了器件,选好了文件,第三步就可以设置串口和串口通信速度了。串口是一个九针的插座,老式的鼠标口就是串口。为了让通信可靠,我们可以适当的选低一些的速度,这个串口线较长时非常重要。 烧录过程中,如果出现失败,可以考虑将串口通信速度降低再试,这是由于机器配置以及当地环境因素决定的,当环境干扰过大时,必需选低一点的波特率(即通信速率)。烧录成功与失败,可以从信息区的提示看出。 选择并设置好串口后(一般不需更改),进入第四步,而这一步基本上不用更改。设置时钟倍频主要是为了提高工作速度,设置时钟增益是为了降低电磁幅射。这些,对于高级工程人员和最终产品会很有用,对于初学者来说,只当没有看见就行了。 第五步是最后一步,点击“Download/下载”,就可以进入烧录状态。 特别说明:点击“Download/下载”之前实验板的电源开关必须关闭,使单片机彻底断电,点击“Download/下载”之后才可以使单片机上电,完成程序的烧录。 注意:点击“Re-Download/重复下载”也可以,这常用于大批量的编程,不必每次都去点“Download/下载”。出现以下图状态时,给实验板通电就可以完成编程过程(如果实验板已经通电,则必须关掉电源1秒钟再次通电)。

单片机c程序编写

单片机C语言编程基础 时间:2011-05-01 22:47:26来源:作者: 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 单片机C语言编程基础 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC While( 1 ); //死循环,相当LOOP: goto LOOP; } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。 在某引脚输出低电平的编程方法:(比如P2.7引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND While( 1 ); //死循环,相当LOOP: goto LOOP; } 在某引脚输出方波编程方法:(比如P3.1引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 {

STC向单片机发送数据小程序(C语言)

#include"stc12c5a60s2.h" #define uchar unsigned char; void initiate(void); void check_zero(void); void time0_on(void); void send_char(void); uchar shu,t,n=1,i=0; uchar code value[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; //************************************************************** void main() { initiate(); for(;;) check_zero(); } //**************************************************************** void initiate(void) { TMOD=0X21; //定时器T1溢出提供波特率,定时器T0定时。 TL1=0XFD; //fosc=11.0592mHz,波特率9600bps对应初值 TH1=0XFD; PCON=0X00; //波特率不加倍。 SCON=0X50; //串口工作方式一,允许接受。 ET1=0; EA=1; TR1=1; } //***************************************************************** void check_zero(void) { if(RI==1) { if(SBUF==0) { RI=0; SCON=0X40;

教你如何用C++写单片机程序

教你如何用C++写单片机程序 关键词:C++ 面向对象单片机 从大一就开始学习单片机,学51,A VR编程都使用C语言的风格,即面向过程,只要能画出程序流程图,程序基本就born了。我热衷于编程,尤其是C++,当时想有没有一天,C++的类和对象也能出现在单片机中? 历经世事沧桑,事到如今,我终于有机会,和大家一起学习使用真正面向对象的C++来控制单片机。目前单片机编译器大部分只支持C语言,C++还不够普及,但我们有理由相信,有着更先进的面向对象的理念,有更加平易近人的类和继承,C++必将取代C,成为单片机程序的主流。试看将来环球单片机,必是C++的世界! 下面大家跟着我来一起学习怎么用C++给单片机编程序!本文要求大家玩过A VR单片机,有过C语言编程经验,而且要对VC6.0开发环境有一定了解。 必备软件:VC6.0(用于编辑源程序),WinA VR(用于生成Makefile,支持A VR系列单片机),Proteus(用于仿真调试)。 首先,你的电脑上要装有VC6.0,进入后选菜单【file】---【new】新建工程,如图1选择Makefile工程,输入工程名称,路径,点确定。 图1_新建工程 一路OK建好工程,界面如图2。这个工程是专门写makefile脚本的,你如果学A VR单片机使用avr-gcc那应该对makefile有一定了解,如果想多了解一点详见https://www.wendangku.net/doc/e514887499.html,/view/974566.html?wtp=tt(呵呵,百度百科)。 你还需要安装WINA VR,这是个免费软件,网上很多资源,这个软件很容易安装,一路Next 就可以啦!为了使用方便,我的WINAVR安装到了C盘根目录下的WINA VR文件夹。安装好后,可以直接用它来编辑源代码,今天我就不讲它的使用方法了,只讲怎么生成makefile。自我感觉用熟悉的VC6.0环境编写程序心情很愉快,大家还是跟我一起来,打造

STC系列单片机程序烧录方法

S T C系列单片机程序烧 录方法 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

STC系列单片机程序烧录方法 来源:互联网作者: 关键字:STC单片机 ??单片机烧录 ??单片机烧录方法 ?? STC单片机具有通过串口编程功能,简单到通过串口3三根线就能将程序烧录到单片机内,这大大的方便了开发人员,省去了昂贵复杂的编程器,在调试程序时也可将内部数据直接通过串口发送到PC上观看,一些不太复杂的程序甚至可以省掉仿真器。 目前大部分的计算机都不带串口,这里还得介绍一下一个小转换工具,可将PC上的USB口转换成单片机的TTL电平。插入硬件后提示安装驱动,完成后查看PC上设备管理器,端口中会多出一个串口,这里是COM3,记住这个串口号,下面给单片机烧录是要用。

单片机板和转换板连线对应连接好,如发现无法通讯,可调整2、3的连线。 1,地线----地线 2,TXD-----RXD 3,RXD-----TXD 转换板由于PC供电,指对外提供很小的供电能力,建议单片机板用单独的电源供电,切记不能外接电源和转换板同时对单片机板供电,否则会烧设备或计算机的危险。 硬件连接正常后就是通过STC专门的烧录软件进行烧录了。

1、现在对应的单片机型号 2、打开编译过的需要写入单片机内的程序,类型都是以.bin和.Hex 结尾的文件。 3、选择连接的串口号,就是上边在设备管理器里看到的COM3。 4、选择通讯波特率,单片机目标板上有晶振的,这一项基本可以不用理会,系统会自动适应合适的波特率。如果目标板使用的是内部振荡,由于内部制造误差,自动波特率可能会连接不成功,这时就要手工

小程序入门小程序AppID是什么AppID有什么用如何找到小程序AppID

很多?人问?小?齿轮,AppID是什什么?有什什么?用?怎么找到它? 现在,我们就正式讲解?一下。 ————————————————————————————— Q1:什什么是AppID? A1:AppID是?小程序的「身份证号码」。 Q2:AppID有什什么?用? A2:AppID是在开发者?工具中上传?小程序,和绑定公众号的必备“密码”。 Q3:那么,应该 如何获取?小程序的 AppID 呢? A3:?方法其实很简单,以下分为两种情况说。 ?一、获取企业、部?门、?自?己开发的?小程序AppID ?小程序管理理员进?入微信公众平台、使?用?小程序帐户登录后, 点击左侧菜单中的「设置」,在「开发设置」?一项,就可以查询到?小程序的 AppID。

有了了 AppID,你?自?己的公众号也可以凭借 AppID,进?行行关联?小程序的操作。 当然,AppID 的作?用不不?止如此。?小程序的开发者需要使?用 AppID,在开发者?工具中进?行行真机调试、提交?小程序包到微信。 需要注意的是,只有通过管理理员扫码验证,?小程序帐户才能登录。也就是说,正常情况下,只有?小程序的管理理员才能查询到?小程序的 AppID。 ?二、公众号关联其它?小程序(?非?自?己制作开发) 1.向对?方的?小程序管理理员获取相应?小程序的 AppID; 2.在公众平台登录?自?己的公众号,点击左侧的「?小程序管理理」; 3.点击右上?角的「添加」,选择「关联?小程序」;

4.输?入?目标?小程序的 AppID。 确认关联操作后,公众平台会?自动向?小程序管理理员发送关联邀请;?小程序管理理员只需要在?手机上确认,即可成功将?小程序与公众号进?行行关联。

单片机课程学习总结

《单片机》课程学习总结 《单片机》这门课程我已经学了一个学期了,在这一个学期的学习过程中,我一开始不怎么懂得编程,但慢慢的我现在已经不仅会读程序还会写程序了。真为自己一个学期来努力学到的单片机知识只是而感到高兴。 怎么学单片机?也常看到有人说学了好几个月可就是没有什么进展。当然,受限于每个人受到的教育水平不同和个人理解能力的差异,学习起来会有快慢之分,但我感觉最重的就是学习方法。一个好的学习方法,能让你事半功倍,这里说说我学习单片机的经历和方法。 我觉得学习单片机首先要懂得C语言,因为单片机大多说都是靠程序来实现的,如果看不懂程序或则不懂的编程是很难学会单片机的。学习单片机首先要明白一个程序是怎么走的,要完全懂得程序每一个步骤的意思。其次要懂得每一条指令的意思,不能盲目地去靠背指令,这是记得不牢靠的,最主要的还是靠了解。学习单片机最主要的对89C51芯片内部结构有全方面的,只要了解了89C51才能知道单片机实现什么样的功能和作用,才能对单片机有更深一步的了解。 通过一个学期《单片机》这门课程的学习,我也从中有了不少心得和体会想和大家分享一下。 万事开头难、要勇敢迈出第一步。开始的时候,不要老是给自己找借口,不要说单片机的程序全是英文,自己看不懂。遇到困难要一件件攻克,不懂指令就要勤奋看书,不懂程序就先学它,这方面网上教程很多,随便找找看一下,做几次就懂了。然后可以参考别的人程序,抄过来也无所谓,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序,要做的工序不会差多少。然后建个程序,加入项目中,再写代码、编译、运行。必须熟悉这一套工序。个人认为,一块学习板还是必要的,写好程序在上面运行一下看结果,学习效果会好很多,仿真器就看个人需要了。单片机是注重理论和实践的,光看书不动手,是学不会的。 知识点用到才学,不用的暂时丢一边。厚厚的一本书,看着人头都晕了,学了后面的,前面的估计也快忘光了,所以,最好结合实际程序,用到的时候才去看,不必说非要把书从第一页看起,看完它才来写程序。比如你写流水灯,完全就没必要看中断的知识,专心把流水灯学好就是了,这是把整本书化整为零,一小点一小点的啃。 程序不要光看不写,一定要自己写一次。最开始的时候,什么都

松翰单片机的OTP可重复烧写的技巧!

松翰单片机的OTP可重复烧写的技巧! 1.问题:笔者在前期工作中,常常遇到在做测试时,只要修改一些简短的指令或数据时,就要再换一个全新的芯片重新烧录一下,再测试。这样即浪费时间,又消费芯片,还消费金钱呢。 2.解决:其实OTP不是你想象的那么“顽固”,只要你对它好一些,还是有些回报的。在烧录前,芯片的内部全是由2进制的1组成,烧录后,是对里面的1进行切断成0,如此,烧录过的不能再烧录,是对已经把1烧录成0的不可再烧,而是没有把1烧成0的,还是可以再烧的。也就是说,1可以变成0,而0不可再变为1,就象保险丝一样,烧断了就不可再烧,而没烧断的,你还可以把它烧断。要想实现重烧的过程,还是要有些技巧的。哎,废话这么多,来些实例的讲吧。 你可以在你想要的地方预留些空间,等你想要在这修改时,再从里面提取出来。 ;-----------------------------------------------------------------------------; 3.实例1:在已经烧过程序的IC上修改数据: incms t_enter_io ;500ms 进入一次 nop ; mov a,#0xFF ;1 预留数据修改(二进制为:b) mov a,#0xFF ;2 预留数据修改 mov a,#0xFF ;3 预留数据修改 mov a,#0xFF ;4 预留数据修改

mov a,#0xFF ;5 预留数据修改 mov a,#0xF3 ;等待被修改的数据 cjb t_enter_io,a,e_tele_io ;249次进入一下 clr t_enter_io ; ;-----------------------------------------------------------------------------; 3.1.1 (直接修改)比如我想在已经烧有上面程序的IC的基础上,修改a=0xF3(2二进制:B)为a=0xF1,此时,你就不要再浪费IC了,直接在上面修改就可以。你可以看到,0xF3与0xF1的区别只在于3和1,二进制为:0011B和0001B,所以你可以把0011B(十进制3)中第2位的1修改为0,即从0011B成为0001B,所以可以直接修改,当然你也要以把它修改成为你想要的数据,但前提是:你只能从二进制中的1烧成0,不可从0变为1. 比如我可以把0xF1再烧成0xA1或0xA0或0x01或0x00等等。 ;-----------------------------------------------------------------------------; (覆盖修改)是否有一种可以在上面的程序中任意修改数据呢这是有的!读者可以看到,我上面的程序为了防止修改不同的数据而所预留的5条 :mov a,0xFF ,这是为了修改各种数据而预留的。你可以把 0xFF(二进制:B)修改成0~255范围的任意一个数据。修改过程为:先把在最下面的不想要的数据(直接送数指令:mov a,0xF3 ;此指令生成的机器指令为:2DF3),用 NOP(机器指令为:0000 )给填充掉。然后第5条的0xFF修改为你想要的数据),比如修改为:0x45,修改后的程序如下: incms t_enter_io ;500ms 进入一次 nop ; mov a,#0xFF

单片机必会程序2

#include "delay.h" /*------------------------------------------------ uS延时函数,含有输入参数unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } #include"display.h" #include"delay.h" #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 //sbit LA TCH1=P2^0;//定义锁存使能端口段锁存 //sbit LA TCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 /*------------------------------------------------ 显示函数,用于动态扫描数码管

单片机入门小程序

51单片机的学习是一个动手实践的过程,很多同学在学习单片机的初期总是觉得很难,无法入门。本人根据自己的学习经历,结合自己刚学习单片机的体验,写下几个小的程序供大家参考,如能掌握如下几个小程序的思想与精髓,那么就已经探踏入了单片机的大门。学习单片机的核心就是动手实践,当我们通过自己的努力把第一个LED点亮时,我们就会信心加倍,之后的学习就会变得轻松!希望对大家有所帮助。 一个LED闪烁 #include sbit led=P0^3; unsigned int a; void main() { P0=0x00; while(1) {a=100000; led=1; while(a--); a=10000; led=0; while(a--); } } 两个led闪烁 #include #define uchar unsigned char #define uint unsigned int void delay(); void main() { while(1) { P0=0xaa; delay(); P0=0x00; delay(); } } void delay() { uchar x,y; for(x=110;x>0;x--) for(y=120;y>0;y--); } 流水灯 #include #include void delay(); void main() { unsigned char temp;

P0=0xef; temp=P0; delay(); while(1) { temp=_crol_(temp,1); delay(); } } void delay() { unsigned char x,y; for(x=40;x>0;x--) for(y=200;y>0;y--); } 键控移位信号灯 #include #include #define uchar unsigned char #define uint unsigd neint sbit k1=P1^0; sbit k2=P1^1; void delay(uchar z); void main() { P0=0X18; while(1) { if(k1) P0=_crol_(P0,1); if(k2) P0=_cror_(P0,1); } } void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=120;y>0;y--) ;} 中断的简单应用 1. 利用定时器中断实现LED闪烁#include #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { P1=0x00;

相关文档
相关文档 最新文档