把arduino变成AVRISP烧写器

把arduino变成AVRISP烧写器
把arduino变成AVRISP烧写器

把arduino变成AVRISP烧写器1. 连接示意图

2.选择例程ArduinoISP

3. 下载ArduinoISP到正常工作的板

4.选择无bootloader的板子型号

5. 选择Burn Bootloader>Arduino as ISP

6. 开始烧写bootloader

7. 等待一会儿,完成。

自制单片机烧写器

像我们这样搞电子的人,要的就是动手的乐趣。下面我们来介绍近期在网络上非常流行的USBasp下载线,因为现在的笔记本包括台式机都渐渐地舍弃了并口、串口;所以之前的并口或串口下载线已经不能再使用了,应该说是做个USBasp下载线是势在必行的,下面我们来介绍其制作的全过程。 图(1) 图1为原作者设计的原理图,为了便于制作我修改过某部分电路如图2,其功能一样。

图(2) 在制作之前首先要搞清楚几点: 第一、这个USB下载线本身就是一块AVR单片机,在制作过程中也必需对其进行程序下载才能运行。 第二、先得大概了解一下这个AVR单机机ATmega8的基本资料。这样才能对电路有个了解,从而便于调试。第三COM1是PC机与USB相接的端口,我们在焊接时一定要区分GND、VCC、D+、D-,下面图(3)是对应本次制作的USB端口的引脚功能。在焊接的之前务必搞清楚,否则会造成PC机端口的USB或下载给的ATmega8烧毁。

图(3)USB端口引脚功能 第四﹑最后我们来了解一下电路的结构。对应图2,其中JP1是选择下载时的速度是快速或慢速,当JP1接地时选择低速,否则为高速。对于选择快速还是慢是相对于被下载的单片机晶振时钟而言的。一般来讲,目标单片机与USBasp的ATmega8的时钟不能相差太远。而JP2是电源的选择,当短接时被下载的单片机选择USBasp供电,则否选择独立供电。切记:两者只能任选其一。LED2为ATmega8程序运行的指示灯,当其点亮时就证明USBasp运行正常。LED1为下载程序时的工作指示灯,当接收到上位机信号

时,此灯就会闪动。 图(4)制作的全部元器件 图(5_a)与图2对应的PCB板顶层

作业习题 中断及定时器

中断及定时器、串行口习题 一、填空 1.MCS-51的Po口作为输出端口时,每位能驱动个SL型TTL负载. 2.MCS-51有个并行I\O口,其中P0~P3是准双向口,所以由输出转输入时必须先 写入 3.设计8031系统时,_ 口不能用作一般I\O口. 4.MCS-51串行接口有4种工作方式,这可在初始化程序中用软件填写特殊功能寄存 器__ _加以选择. 5.当使用慢速外设时,最佳的传输方式是。 6.当定时器To工作在方式时,要占定时器T1的TR1和TF1_两个控制位. 7.MCS-51有个中断源,有2 个中断优先级,优先级由软件填写特殊功能寄存器加以选择.. 8.用串口扩并口时,串行接口工作方式应选为方式。 9.在串行通信中,有数据传送方向、、三种方式. 10.外部中断入口地址为_ 。 二、判断 1.MCS-51的5个中断源优先级相同。() 2.要进行多机通信,MCS-51串行接口的工作方式应为方式1。() 3.MCS-51上电复位时,SBUF=00H。()。 4.MCS-51有3个中断源,优先级由软件填写特殊功能寄存器IP加以选择.. () 5.用串口扩并口时,串行接口工作方式应选为方式1. () 6.外部中断INTO 入口地址为_0013H() 7.MCS-51外部中断0的入口地址是0003H。(). 8.TMOD中的GATE=1时,表示由两个信号控制定时器的启停。()。 9.使用8751且=1时,仍可外扩64KB的程序存储器。() 10.PC存放的是当前执行的指令。() 11.MCS-51的特殊功能寄存器分布在60H~80H地址范围内。() 12.MCS-51有4个并行I\O口,其中P0~P3是准双向口,所以由输出转输入时必须先写入"0"() 三、选择 1.在中断服务程序中,至少应有一条( ) (A)传送指令(B)转移指令(C)加法指法(D)中断返回指令 2.要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是() (A)98H (B)84H (C)42 (D)22H 3.D MCS-51在响应中断时,下列哪种操作不会发生( ). (A)保护现场(B)保护PC (C)找到中断入口若悬河(D)保护PC转入中断入口 4.用MCS-51串行接口扩展并行I\O口时,串行接口工作方式应选择( ) (A)方式0 (B)方式1 (C)方式2 (D)方式3 5.MCS-51有中断源() (A)5个(B)2个(C)3个(D)6个 6.MCS-51响应中断时,下面哪一个条件不是必须的() (A)当前指令执行完毕(B)中断是开放的确 (C)没有同级或高级中断服务须(D)必须有RET1指令 7.使用定时器T1时,有几种工作模式() (A)1种(B)2种(C)3种(D)4种 8.计算机在使用中断方式与外界交换信息时,保护现场的工作方式应该是( ) (A)由CPU自动完成(B)在中断响应中完成功之路 (C)应由中断服务程序完成(D)在主程序中完成 9.下面哪一种传送方式适用于处理外部事件( ) (A)DMA (B)无条件传递进(C)中断(D)条件传递 四、编程 1. 1. 8225A控制字地址为300FH,请按:A口方式0输入,B口方式1输出,C口高位输出,C口低位输入,确定8225A控制字并编初始化程序. 2. 2. 编定一个软件延时1S和1min的子程序.设fosc=6Hz,则一个机器周期1μs。

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

51单片机外部中断与定时器的实用

中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器IE 位地址 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H 位符号 EA / ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断保留 ET2 定时器2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器0 中断使能 EX0 外部中断 0使能 8051 支持两个中断优先级 有标准的中断机制, 低优先级的中断只能被高优先级的中断所中断 ,而高优先级的中断不能被中断。 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存器IP 来单独设置中断优先级 如果每个中断源的相应位被置位 则该中断源的优先级为高,如果相应的位被复位, 则该中断源的优先级为低, 如果你觉得两个中断源不够用 ,别急以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 位地址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H 位符号 / / / PS PT1 PX1 PT0 PX0 编号 中断源 中断向量 上电复位 0000H 0 外部中断0 0003H 1 定时器0溢出 000BH 2 外部中断1 0013H 3 定时器1溢出 001BH 4 串行口中断 0023H 5 定时器2溢出 002BH PT2 定时器 2中断优先级 PS 串行通信中断优先级 PT1 定时器 1中断优先级 PX1 外部中断1 优先级 PT0 定时器0中断优先级 PX0 外部中断0 优先级

SI-PROG编程器的工作原理及其程序设计

SI-PROG编程器的工作原理及其程序设计 时间:2009-06-16 13:03:06 来源:现代电子技术作者:安郁宽1,李宏2,闫鹏1 1.滨州医学院物理教研室2 摘要:介绍SI-PROG编程器的工作原理,利用PC机串口UART芯片实现单片机的ISP下载。PC机串口8250芯片中SOUT,DTR,RTS,CTS四个引脚的电平可通过其内部的几个寄存器分别进行控制或读取,利用引脚可实现单片机的ISP下栽。介绍了8250与单片机之间通信信号的逻辑关系以及电平转换,分析了接收器的阈值电压的特点,给出了使用SI-PROG编程器的条件。最后,以AVR单片机为例介绍了下载程序设计。结果表明,利用PC机串口UART芯片可以实现对AVR单片机的ISP下载,其硬件电路和软件设计都很简单。 关键词:S1-PROG编程器;程序设计;UART;AVR单片机 SI-PROG编程器为PonyProg 2000软件中使用的一种ISP编程器,该编程器利用PC机串口电路的异步通信控制器UART实现AVR,PIC,AT89等单片机的ISP编程。虽然该编程器不为Atmel的AVRStudio 所支持,但是其硬件电路简单,成本低,便于制作,适于初学者进行学习和简单开发。下面以AVR单片机为例,介绍SI-PROG编程器的工作原理及其程序设计。 l SI-PROG编程器的工作原理 1.1 电路组成 图1为SI-PROG串口编程器的工作原理图。电路分为PC机串口电路、SI-PROG编程器和目标机3部分。编程器通过9针D型连接器DB9与PC机串口连接,通过10针连接器J1与目标机连接,电路在文献[4]的基础上做了适当的简化。J1引脚定义与Atmel的STK200下载线相同。 1.1.1 PC机串口电路及SI-PROG编程器 PC机串口电路由U1~U4组成。8250(U1)为异步通信控制器UART,SN75150(U2,U3)为驱动器,

51单片机汇编语言编程:用定时器控制输出矩形波

80C51单片机的时钟频率为12MHz,利用定时器T1和P1.0输出矩形脉冲。 波形只画出了2段:一段为100us 另一段为50us。 要完全的、完整的、详细的编写此程序的过程!谢谢 ------------------------ 最佳答案: 用一个定时器定时50us,也可以达到题目要求。 在我的空间里面有类似的问题和解答。 ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT START: MOV TMOD, #20H ;设置T1定时方式2 MOV TH1, #206 ;自动重新装入方式. MOV TL1, #206 ;定时时间 MOV IE, #10001000B ;开放总中断和T1中断. SETB TR1 ;启动T1 MOV R2, #3 ;周期是3×50us SJMP $ ;等着吧. T1_INT: SETB P1.0 ;输出高.

DJNZ R2, T1_END ;R2-1 CLR P1.0 ;减到0,就输出低电平. MOV R2, #3 T1_END: RETI ;中断返回. END ;完. ------------------------ 已知51单片机系统晶振频率为12MHz,请利用定时器1工作方式1,中断方式在P2.3输出频率为10Hz的方波。 写出定时设计过程及完整代码 问题补充:用汇编的麻烦写一下 ------------------------ 最佳答案: ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT START: MOV TMOD, #10H ;设置T1定时方式1 MOV TH1, #(65536-50000) / 256 ;送入初始值.

可编程控制器的工作原理

可编程控制器的工作原理 PLC由于自身的特点,在工业生产的各个领域得到了越来越广泛的应用。而作为PLC 的使用者,要正确地使用PLC去完成各类控制任务,首先需要了解PLC的基本工作原理。 PLC源于用计算机控制来取代继电接触器,所以PLC的工作原理与计算机的工作原理基本上是一致的。两者都是在系统程序的管理下,通过用户程序来完成控制任务。 1. PLC的工作方式 虽然PLC的工作原理与计算机的工作原理基本一致,都具有相同的基本结构和相同的指令执行原理。但是,两者在工作方式上却有着重要的区别,不同点体现在计算机运行程序时,一旦执行到END指令,程序运行结束,且计算机对输入、输出信号进行实时处理;而PLC的CPU采用循环扫描工作方式,当程序执行到END后,再从头开始执行,周而复始地重复,直到停机或从运行切换到停止。对输入、输出进行集中输入采样,集中输出刷新。I/O映像区分别存放执行程序之前的各输入状态和执行过程中各结果的状态。 (1)PLC的循环扫描工作方式 可编程控制器是在硬件的支持下,通过执行反映控制要求的用户程序实现对系统的控制。为此PLC采用循环扫描的工作方式。PLC循环扫描的工作过程如图2-1所示,包括五个阶段:内部处理与自诊断、与外设进行通信处理、输入采样、用户程序执行、输出刷新。 PLC有运行(RUN)和停止(STOP)两种基本的工作模式。 当处于停止(STOP)工作模式时,只执行前两个阶段,即只作内部处理与自诊断,以及与外部设备进行通信处理:上电复位后,PLC首先作内部初始化处理,清除I/O映像区中的内容;接着作自诊断,检测存储器、CPU及I/O部件状态,确认其是否正常;再进行通信处理,完成各外设(编程器、打印机等)的通信连接;还将检测是否有中断请求,若有则作相应中断处理。在此阶段可对PLC联机下载程序。 图2-1 PLC循环扫描的工作过程

按键和定时器中断综合应用-秒表计时器

& INT1按键中断INT0# 和T0中断的综合应用 ‐简易秒表计时器 范例1:汇编源代码 范例2:C51源代码

P7 EQU 0F8H ORG 0100H #60H P6 EQU 0E8H D1 EQU 0FEH //数码管个位EQU 0FDH MAIN: MOV SP ,#60H //设置堆栈 MOV P2,#0FFH //关P2口LED MOV TMOD,#00H D2 //十位D3 EQU 0FBH // 百位 VARX DATA 30H //计数变量DATA 31H MOV TH0,#4BH MOV TL0,#0FDH //设置T0MOV R7,#20MOV VARX,#0 //置计数变量0DIG1 //BCD 个位DIG2 DATA 32H //BCD 十位DIG3 DATA 33H //BCD ,SETB ET0SETB EX0SETB IT0//百位ORG 0000H LJMP MAIN SETB EX1SETB IT1 SETB EA //允许相关中断 ORG 0003H LJMP KY1INT //KY1中断ORG 000BH LJMP T0INT //T0中断ORG 0013H KY2INT //KY2LJMP 中断

CONV: MOV A,VARX //读计数变量MOV A,DIG2 //读十位BCD MOV B,#100DIV AB DIG3A MOVC A,@A+DPTR MOV P7,A P6#D2//MOV DIG3,A MOV A,B MOV B,#10MOV P6,#D2 查表送显示ACALL DELAY //扫描延时A,DIG3//DIV AB MOV DIG2,A DIG1B MOV 读百位BCD MOVC A,@A+DPTR MOV P7,A MOV DIG1,B //转换为3位BCD DISP: MOV A,DIG1 //读个位BCD MOV DPTR,#SEGTBL MOV P6,#D3 //查表送显示ACALL DELAY CONV //MOVC A,@A+DPTR MOV P7,A P6,#D1//LJMP 返回读取VARX MOV 查表送显示 ACALL DELAY //扫描延时

AT89C51 52 55单片机编程器(烧写器)制作

AT89C51/52/55单片机编程器(烧写器)制作 -------------------------------------------------------------------------------- AT89C51/52/55单片机编程器(烧写器)制作 AT89C51是一款应用最为广泛的8051单片机,更重要的是他具有反复烧写(FLASH)的特性。一般情况下可重复烧写1000次,这样为初学者试验提供了一个廉价的平台。为了满足广大单片机爱好者动手的需要,本人利用半个月的时间,参考国外资料,实际设计制作成功一款简单的AT89C51/52/55单片机编程器。由于单片机编程时序不同,这一款编程器仅仅支持ATMEL 公司的AT89C51, AT89C52, AT89C55芯片,不支持华邦或飞利浦兼容芯片。下面是单片机编程器电路图.

注:元器件清单见附录 工作原理简述: Q2, Q4以及周围的几个元件构成了电平转换电路,这样节省了1片max 232芯片,在要求不高的场合,这个电路在单片机通信中可以取代MAX232。Q1, R2,R4,DW2,4个元件为编程器提供烧写用12V电压,其中,R4, R2构成了分压电路;平时,*芯片89C51第13脚(P3.3)输出高电平,Q1导通,R2(1K)将DW2(12V)拉低,此时DW2电压由R4,R2 分压,大约3-5V 之间;当写程序时,*芯片第13脚(P3.3)输出低电平,Q1截止,DW2(12V)直接送到被烧芯片的31脚,从而提供烧写电压。ATMEL官方网站提供的编程器器烧写电压是用LM317调整得到的,并且用到了两个高精度电阻,电路复杂且成本高,该电路经过本人数百台的实验证明非常稳定可靠. 电源变压器要求为15V的电源,例如常见的3-12V直流可调电源,注意其空载电压不要低于13V , 滤波应好一些,否则可能出现编程不可靠的情况。 *芯片用IC座安装,另外找一个编程器烧写好*程序EZ51.HEX后插入,方便调试。烧写卡座如果购买有困难,可以直接用一个IC座。连接电缆用9对9一头公一头母的串口线,注意市场上有些串口线的两头2,3脚是交叉的,最好用万用表检查一下是否为一一对应。如果没有串口线,也可拆一个老式的串口鼠标自制,只要两头把2,3,5脚连接好即可。本电路对元件没有特殊要求,电阻用1/8W普通碳膜,三极管我用的是2SA1015,2SC1815, 实际上很多小功率管都可以,例如9014,9015。只是需要注意他们的管脚排列区别。二极管1N4148可以用1N4004替代。另外12V稳压管最好挑选一下,精度要求为5%以内。 11.0592M晶体有条件的话应当测试一下,市场零售的晶体有些不起振。 这款编程器的烧写软件EZ31.EXE界面很简单;全兼容于WINDOWS9X-2000。仅有几个按钮,分别为打开文件(SEND),读芯片(READ),退出(EXIT),COM选择,加密(LOCK CODE),以及校验(FAST VERILY)。大家用一下就知道了。注意目前提供下载的为它的升级版本ez4.0自动监测端口号和芯片。使用更简单!DIY安装步骤: 1: 安装电阻,共11个;元件插到位后焊接剪脚: 2:安装二极管,三个1N4148 和一个12V稳压管DW2。请仔细看管子的表面有字:稳压管印有12V字样,千万别给搞混了。二极管是有极性的,二极管的黑头方向插向pcb的印有白色的一边就对了:元件插到位后焊接剪脚: 3:安装2个104和2个30p电容;11。0592晶体,这些都没有方向性随便插: 4:插入三极管。电解电容,发光管:注意这些东西都是有极性的:如果搞反了可不行。电解电容和发光管很好办,都是负极向下。三极管(2个2SC1815,一个2SA1015,)以及一个78L05的稳压IC:他们的方向在PCB上可以看到,屁股的方向就是半圆圈的方向。 5:插入排阻(排阻有一个白点的一端是公共端,他的位置在靠近PCB边源的一端;电源插座,232插座就不用说了。 6:插*芯片的插座。 7:插烧写卡座。由于他和*芯片是面对面的,因此必须先焊接*芯片插座,最后焊烧写卡座。否则等会不好动烙铁了。 8:如果您实在搞不清除元件的方向,请睁大眼睛仔细看看上面的照片吧。 9:最后检查一下电路板的各个地方有没有插错,短路的。再按照上面的调试方法调试。如果没有插错基本可以一次调OK 调试: 组装好后通电,用万用表检查:

定时器中断综合实验

实验2 定时器、中断综合实验 一、实验目的 熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用,时钟程序的设计与调试技巧。 二、实验内容 编写程序,用定时器中断现实LED跑马灯实验。 实验内容1: 1).用查表法实现LED跑马灯实验; 2).采用定时器控制跑马灯的变化速度。 三、流程框图 四、实验步骤及程序 ORG 0000H LJMP MAIN ORG 000BH ; T0 中断入口地址 MOV TH0,#0BH ; 62.5毫秒定时 MOV TL0,#0DCH DJNZ R2,T0OUT ; 中断16次为1秒 MOV R2,#16 PUSH ACC ; 保存数据 MOVC A,@A+DPTR ; 查表法LED 左右移 MOV P0,A POP ACC INC A CJNE A,#24,T0OUT ; 24种"花样" CLR A T0OUT: RETI ORG 0050H MAIN: MOV SP,#6FH ; MOV R2,#16 ; 定时器中断次数,@12M MOV A,#00H ; 查表起始值 MOV DPTR,#TABLE MOV TMOD,#00000001B ; 定时器方式1 MOV TH0,#0BH ; 62.5MS MOV TL0,#0DCH SETB EA ; 中端总允许 SETB ET0 ; 允许T0 中断 SETB TR0 ; 启动定时 WAIT: SJMP $ ;原地等待中断

RET TABLE:DB 0FEH,0FDH,0FBH,0F7H ;LED 左右移数据表,共有24种"花样" DB 0EFH,0DFH,0BFH,07FH DB 00H,55H,0AAH,00H DB 7FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H,0AAH,55H,00H END 思考:换用T1定时器,定时方式2。 用汇编语言编辑8个LED灯,实现第一秒只有L1不亮,其余七个全亮,第二个L2不亮,其余七个全亮 ORG 0000H SJMP START ORG 000BH SJMP T0_INT START: MOV TMOD, #01H MOV TH0, #3CH ; (65536 - 50000) / 256; MOV TL0, #0B0H ; (65536 - 50000) % 256; SETB TR0 SETB ET0 SETB EA MOV A, #01H MOV R2, #20 SJMP $ T0_INT: MOV TH0, #3CH ; (65536 - 50000) / 256; MOV TL0, #0B0H ; (65536 - 50000) % 256; DJNZ R2, T0_END MOV R2, #20 MOV P0, A RL A T0_END: RETI END 实验内容2: 设计一个实时时钟,用42H显示秒单元,用41H显示分单元,用40H显示时单元。要求每满1秒,秒单元内容加1;秒满60,分单元加1,分满60,时单元加1。时满24 ,时分秒全部清0。 从秒到分,从分到时,通过软件累加现实。P115。 ORG 0000H LJMP MAIN ;上电,跳向主程序 ORG 000BH ;T0的中断入口

51单片机每个外部中断和定时器中断 应用模版

第一步,中断配置 /************************************************************ 函数名:INT0_Config 功能:配置单片机与中断相关的硬件,让单片机能够正常检测中断和执行中断代码。 输入参数: 输出参数: ************************************************************/ void INT0_Config(void) { IT0=1; //中断触发方式,IT0=0,低电平触发,INT0=1下降沿触发(下降沿就是由高电平向低电平的跳变); EX0=1; //外部中断0的中断开关,每个中断源都有自己的中断开关。 EA=1; //打开总中断,如果总中断不打开,就是其他中断开关被打开,单片机也不能执行中断。 } 第二步,中断服务,也就是cpu被中断后所要做的事。 /************************************************************ 函数名:Isr_INT0 功能:中断服务 输入参数: 输出参数: ************************************************************/ void Isr_INT0() interrupt 0 //interrupt表明该函数是中断函数,后面的标号表示是哪个中断源产生的中断。{ //(INT0)为0, Timer0为1,INT1为2,Timer3,串口中断为4。 // Add your code here //自己想要中断后发生的程序 } 第三部主函数 /************************************************************ 函数名:main 功能:主函数 输入参数: 输出参数: ************************************************************/ void main() { INT0_Config();//调用这个函数来配置外部中断 while(1) { //Add your code here //CPU一直在这里循环的执行代码,一旦发生中断,就停下来去执行中断函数Isr_INT0() interrupt 0, //执行完成后,返回从断点处继续往下执行原来的代码。 } }

单片机定时器汇编

我们在学单片机时我们第一个例程就是灯的闪烁,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机只能这样工作吗?当然不是,我们能用定时器来实现灯的闪烁的功能。例1:查询方式ORG 0000H AJMP START ORG 30H START: MOV P1,#0FFH ;关所灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB TR0 ;定时/计数器0开始运行 LOOP: JBC TF0,NEXT ;如果TF0等于1,则清TF0并转NEXT处(LOOP:JNB TF0,$) AJMP LOOP ;不然跳转到LOOP处运行 NEXT: CPL P1.0 MOV TH0,#15H MOV TL0,#9FH;重置定时/计数器的初值 AJMP LOOP END 键入程序,看到了什么?灯在闪烁了,这可是用定时器做的,不再是主程序的循环了。简单地分析一下程序,为什么用JBC呢?TF0是定时/计数器0的溢出标记位,当定时器产生溢出后,该位由0变1,所以查询该位就可知宇时时间是否已到。该位为1后,要用软件将标记位清0,以便下一次定时是间到时该位由0变1,所以用了JBC指令,该指位在判1转移的同时,还将该位清0.以上程序是能实现灯的闪烁了,可是主程序除了让灯闪烁外,还是不能做其他的事啊!不对,我们能在LOOP:……和AJMP LOOP指令之间插入一些指令来做其他的事情,只要保证执行这些指令的时间少于定时时间就行了。那我们在用软件延时程序的时候不是也能用一些指令来替代DJNZ吗?是的,但是那就要求你精确计算所用指令的时间,然后再减去对应的DJNZ循环次数,很不方便,而现在只要求所用指令的时间少于定时时间就行,显然要求低了。当然,这样的办法还是不好,所以我们常用以下的办法来实现。程序2:用中断实现 ORG 0000H AJMP START ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ;跳转到真正的定时器程序处 ORG 30H START: MOV P1,#0FFH ;关所灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB EA ;开总中断允许 SETB ET0 ;开定时/计数器0允许 SETB TR0 ;定时/计数器0开始运行 SJMP $ ;LOOP: AJMP LOOP ;真正工作时,这里可写任意程序 TIME0:

定时器和计数器应用C语言程序

1、定时器应用实验 单片机的P1口上接有8只LED。采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。 #include Char i=100;/*给变量i赋初值*/ void main( ) {TMOD=0x01;/*设置定时器T0为方式1*/ TH0=0xee;/*向TH0写入初值的高8位*/ TL0=0x00;/*向TL0写入初值的低8位*/ P1=0x00;/*P1口8只LED点亮*/ EA=1;/*总中断允许*/ ET0=1;/*定时器T0中断允许*/ TR0=1;/*启动定时器T0*/ while(1) ;/*无穷循环,等待定时中断*/ } /*以下为定时器T0的中断服务程序*/ void T0_int(void) interrupt 1 {TH0=0xee;/*给T0装入16位初值,计4608个数后,T0溢出*/ TL0=0x00; i--;/*循环次数减1*/ if(i<=0) {P1=~P1;/*P1口按位取反*/ i=100;/*重新设置循环次数*/ } } 2、计数器应用实验 采用定时器T1的方式1的中断计数方式。计数输入引脚T1(P3.5)上外接开关K1,作为计数信号输入。按4次K1后,P1口的8只LED闪烁不停。 #include void Delay(unsigned int i)/* 定义延时函数Delay( ),i是形式参数,不能赋初值*/ {unsigned int j; for(;i>0;i--) /* 变量i由实际参数传入一个值,因此i不能赋初值*/ for(j=0;j<125;j++) {;} /*空函数*/ } void main( ) /*主函数*/ {TMOD=0x50;/*设置定时器T1为方式1计数*/ TH1=0xff;/*向TH1写入初值的高8位*/ TL1=0xfc;/*向TL1写入初值低8位*/ EA=1;/*总中断允许*/ ET1=1;/*T1中断允许*/ TR1=1;/*启动T1*/

AT89C51系列单片机烧写器的设计与实现

收稿日期:2007-01-17 AT 89C51系列单片机烧写器的设计与实现 冉彦中1,曹婧华1,刘沛先2 (11吉林大学和平校区,吉林长春130062;21解放军208医院,吉林长春130062) 〔中图分类号〕TP3 〔文献标识码〕A 〔文章编号〕1002-2376(2007)04-0025-02 〔摘 要〕本文以AT 89C51单片机为例,介绍其电路和工作原理。 〔关键词〕单片机;串行通信;M AX 232 0 引言 对于自动化或计算机专业的学生来说,学习单片机课程最有用的可能是编程器或烧写器,一台商业的编程器至少要几百元,让学生或初学者难以承担。能否自己做一个,既锻炼自己的动手能力,又能满足学习和开发需要,是一个不错的选择。利用PC 机的串行口C OM1或C OM2与单片机的串行口进行串行通信,将PC 机的数据传送到单片机中。PC 机串行口给出的信号是一个RS2232信号,它是一个基于3~7V 正电压、3~7V 负电压的脉冲链。这一信号必须转化为一个0~5V 的脉冲链,以便单片机读取。中间转换电路采用M AX232通信芯片来实现。1 烧写器硬件连接111 电平转换 通信电平转换芯片M AX232 RS232是目前异步串行通信中应用最广泛的标准 总线,适用于数据中断设备(DTE 和数据通信设备 (DEC )E LA RS2232C 是目前最常用的串行接口标准,用于计算机与计算机之间,计算机与单片机的数据通信。此标准的目的是定义数据终端设备(DTE )之间的电气特性。RS2232C 提供了单片机与单片机、单片机与PC 机之间串行数据通信的标准接口。但RS2232C 规定的逻辑电平与单片机的逻辑电平是不一 致的。因此在应用中,必须把微处理器的信号电平(TT L 电平)转换为RS2232C 电平,或者对二者进行逆转换。选用电平转换芯片M AX232来实现的。112 AT89C51单片机与PC 机串行通信接口的硬件电 路 AT89C51单片机与PC 机串行通信接口其接口电 路如图1所示。其工作电压取自电压(5V )电源。 串行通信是采用最简单的T xD ,RxD ,G ND 三线制连接,注意T xD 和RxD 两边应该交叉连线。现从M AX232芯片中如使T2I N 接单片机的发送端TX D ,则PC 机RS232的接收端要对应接T2OUT 引脚。同时R2OUT 接单片机的RX D 引脚。PC 机的RS232的发送 端TX D 对应接R2I N 引脚。单片机是一个全双工的串行通讯口,单片机和PC 机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TT L 电平的,两者之间必须有一个电平转换电路,因此采用了专用芯片M AX232进行转换。而具体三线制连接串口,也就是说电脑的 9针串口只连接其中的3根线:第5脚的G ND ,第2脚的RX D ,第3脚的TX D 。电路如图1所示,M AX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 图1 电路图 5 2医疗装备2007第4期

T0作定时器汇编程序中断法

T0作定时器汇编程序(中断法) 单片机T0作定时器实现数码管显示的汇编程序(中断法) 电路是:P0口接数码管的字型码笔段,P2口接数码管的数位选择端. 下面是汇编语言源程序: SECOND EQU 30H TCOUNT EQU 31H ORG 00H LJMP START ORG 0BH LJMP INT0X START: MOV SECOND ,#00H MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B

MOVC A,@A+DPTR MOV P2,A MOV TCOUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-50000)/256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT0X: MOV TH0,#(65536-5000)/256 MOV TL0,#(65536-5000) MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H

INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX: MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR

MOV P2,A NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END T0工作在方式1,计时50ms,共20个循环,总计时1秒。 P0口显示低位,P2口显示高位,满60清零

单片机定时器使用总结

单片机定时器的使用 第一部分:51系列定时器 定时/计数器0 和定时/计数器1都有4种定时模式。 16位定时器对内部机器周期进行技术,机器周期加1,定时器值加1,1MHZ 模式下,一个机器周期为1us 。 定时器工作模式寄存器TMOD,不可位寻址,需整体赋值,高4位用于定时器1,第四位用于定时器0。 C/T:为定时器功能选择位,C/T=0对机器周期计数,C/T=1,对外部脉冲计数。 GATE:门控位,GATE=0,软件置位TRn即可启动计时器,GATE=1需外部中断引脚为高电平时才能软件置位TRn启动计时器,一般取GATE=0。 定时器控制寄存器TCON TFn:Tn溢出标志位,当定时器溢出时,硬件置位TFn,中断使能的情况下,申请中断,CPU响应中断后,硬件自动清除TFn。中断屏蔽时,该位一般作为软件查询标志,由于不进入中断程序,硬件不会自动清除标志位,可软件清除。 TRn:计时器启动控制位,软件置位TRn即可启动定时器,软件清除TRn 关闭标志位。 IEn:外部中断请求标志位。

ITn:外部中断出发模式控制位,ITn=0为低电平触发,ITn=1为下降沿触发。 中断允许控制寄存器IE EA(IE.7):全局中断控制位。EA=1开全局中断,EA=0关闭全局中断。 IE.6无意义。 ETn:定时器中断使能控制位。置位允许中断,清除禁止中断。 ES:串行接收/发送中断控制位,置位允许中断。 EXn:外部中断使能控制位。置1允许,清0禁止。 中断优先级控制寄存器IP,复位后为00H IP.6,IP.7保留,无意义。 PT2:定时器2中断优先级控制,置1设为高优先级,清0置位低优先级。 PS:串行中断优先级控制位。 PT1/0:定时器1/0优先级控制位,置1高,清0低。 PXn:外部中断优先级控制位。 当有同级中断同时响应,按IE0—>TF0—>IE1—>TF1—IE0—>RI+TI—>TF2顺序依次响应。 定时器模式0的使用TMOD&=0xf0/TMOD&=0x0f TL0高3位不用,低5位溢出时,直接向TH0进位。 通过设置TH0和TL0初值(0~8191),使计数器从初值开始加1,溢出后申请中断,溢出后需重新设置初值,否则将从0开始加1计数。 T=(模值-初值)*机器周期,初值为8191位技术最小值1,初值为0为计数最

DSP 的定时器和外中断实验报告

实验三:DSP 的定时器和外中断 定时器: 一.实验目的 1.通过实验熟悉VC5509A 的定时器; 2.掌握VC5509A 定时器的控制方法; 3.掌握VC5509A 的中断结构和对中断的处理流程; 4.学会C 语言中断程序设计,以及运用中断程序控制程序流程。 二.实验设备 计算机,ICETEK-VC5509-A 实验箱(或ICETEK 仿真器+ICETEK–VC5509-A 系统板+ 相关连线及电源)。 三.实验原理 1.通用定时器介绍及其控制方法(详见spru595b.pdf): TMS320VC5509A 内部有两个20 位通用定时器(GP): * 每个通用定时器包括: - 一个16 位的减计数的计数器TIM; - 一个16 位的定时器周期寄存器PRD; - 一个16 位的定时器控制寄存器TCR; - 一个16 位的定时器预定标寄存器PSCR; * PSCR 寄存器说明: 15 10 9 6 5 4 3 0 Reserved PSC Reserved TDDR PSC: 4 位的预定标值,与TIM 共同组成20 位的定时计数器. TDDR: 预定标周期寄存器(在需要时重装入PSC 的值) TCR 寄存器说明(详见spru595b.pdf) 2.中断响应过程(详见spru595b.pdf): 外设事件要引起CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被 使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1 会引起TINT 中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。 3.中断程序设计: - 程序中应包含中断向量表,VC5509A 默认向量表从程序区0 地址开始存放,根据IPVD 和IPVH 的值确定向量表的实际地址。 - 注意观察程序中INTR_init()函数的定义部分,其中IPVD 和IPVH 的值都为0x0d0;同时 观察配置文件ICETEK–VC5509-AE.cmd 中的VECT 段描述中o=0x0d000。 - 向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入执行的程序入口。 - 服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务 5.实验程序分析:

单片机定时器中断原理和C语言代码详解

单片机定时器中断原理和C语言代码详解 我之前都是用ARM7,单片机基本不会。但一个项目要用到51,所以克了一下51还是有点模糊,今天调了这个代码之后,对51定时器中断有些心得,拿来和大家共享。废话不说了,上代码。 #define _1231_C_ #include "reg51.h" #include "1231.h" //sbit OE=P2^3; unsigned int SystemTime; void timer0(void) interrupt 1 using 3 //中断部分代码,见下文的释疑 { TH0 = 0xdb; TL0 = 0xff; // TF0 = 0; SystemTime++; } void main() { TMOD &= 0xF0; TMOD |= 0x01; //TMOD的值表示定时器工作方式选择 TH0 = 0xdb; //写入初始值,初始值可以决定定时多久 TL0 = 0xff; //根据下文的木桶比喻的话,如果TH0 = 0x00;TL0 = 0x00;则表示从桶底开始装水。 //TH0 = 0xdb;TL0 = 0xff;可以这样子理解相当于木桶里已经有部分液铅在里面, //TH0和TL0这个两个值表示木桶里液铅的高度,即此时桶里只能从液铅的高度以上开始装

水, //TH0 = 0xff;TL0 = 0xff;即表示桶的最高位置. TF0 = 0; //计数到时TF0为1,即当TH0 = 0xff;TL0 = 0xff;再运行一步TF0 = 1; TR0 = 1; //开始计数,从这时起,每运行一步TH0和TL0都会增加,直到TH0 = 0xff;TL0 = 0xff; //相当于开水龙头,如TR0=0则TH0和TL0不变 ET0 = 1; //允许定时器0中断 EA=1; //开总中断 //下面是个死循环,程序里每运行一步TH0和TL0都会增加,当增加到TH0 = 0xff;TL0 = 0xff; //单片机会从死循环里退出,去执行中断部分的代码,即开始运行void timer0(void) interrupt 1 using 3{} //运行完中断部分的代码后,接着继续执行死循环里的代码。 //注意:当TH0 = 0xff;TL0 = 0xff;再运行,TF0并没有从0变为1,个人猜测TF0=1;时触发了中断,并重新被置零。 //如把ET0 = 1;和EA=1;注释掉,当TH0 = 0xff;TL0 = 0xff;再运行,TF0会变为1,此时不会再执行中断部分代码。 while(1) { if ((SystemTime%100) 释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取的 interrupt xx using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1

相关文档
最新文档