5 STC15F2K60S2单片机的程序设计 例题

合集下载

关于STC15F2K60S2的AD应用

关于STC15F2K60S2的AD应用

STC15F2K60S2芯片A/D转换器的应用1.目的在工业控制过程中,它是控制系统与微机之间不可缺少的接口方式。

要实现自动控制,就要检测有关参数,A/D转换器,把检测到的电压或电流信号(模拟量)转换成计算机能够识别的等效数字量,这些数字量经过计算机处理后输出结果,通过D/A转换器变为电压或电流信号,送到执行机构,达到控制某种过程的目的。

2.与A/D转换相关的寄存器STC15系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到300KHz(30万次/秒)。

8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。

上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D装换,不需作为A/D使用的P1口可继续作为I/O口使用(建议只作为输入)。

需作为A/D使用的口需先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能。

P1ASF寄存器的格式如下:2.2. ADC_CONTRADC_CONTR寄存器的格式如下:语句。

ADC_POWER:ADC电源控制位。

0:关闭ADC电源;1:打开A/D转换器电源。

建议进入空闲模式和掉电模式前,将ADC电源关闭,即ADC_POWER = 0,可降低功耗。

启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后关闭A/D电源可降低功耗,也可不关闭。

初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。

建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于高精度A/D转换,如能将定时器/串行口/中断系统关闭更好。

由软件清0。

不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D 转换是否结束,当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。

ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。

8 STC15F2K60S2单片机的定时器计数器 例题

8 STC15F2K60S2单片机的定时器计数器 例题
JBCTF1,Timer1_Overflow;查询计数溢出
SJMPCheck_TF1;未到5mS继续计数
Timer1_Overflow:
CPL P1.0;对P1.0取反输出
SJMP Check_TF1;未到1s继续循环
END
(2)中断方式实现:
ORG0000H
LJMPMAIN;上电复位后,转MAIN
AJMP Check_TF1
END
2)中断方式实现
ORG0000H
AJMPMAIN
ORG001BH
AJMPTimer1_ISR
MAIN:
MOV TMOD, #60H;设定定时器1模式2,计数功能
MOV TH1, #0FBH
MOV TL1, #0FBH;设置计数器初值(256-5)
SETB ET1
SETB EA
SETB TR1;启动计数
SJMP $
Timer1_ISR:
CPL P1.0;当统计5个脉冲,LED灯状态翻转
RETI
END
C51参考程序如下:
1)查询方式实现
#include<reg51.h>
sbit led = P1^0;
void timer_initial(void)
{
TMOD = 0x60;//设定定时器1模式2,计数功能
{
LED = _cror_(LED,1);//循环右移一位
}
else {t = 0;}
}
/*--------------------T1中断服务子函数------------------*/
void Timer1_int(void) interrupt 3 using 1//定时T1中断服务程序

4 STC15F2K60S2 单片机的指令系统例题

4 STC15F2K60S2 单片机的指令系统例题

第4 章STC15F2K60S2 单片机的指令系统例题例4.1 分析执行下列指令序列后各寄存器及存储单元的结果。

MOV A, #30HMOV 4FH, AMOV R0, #20HMOV @R0, 4FHMOV 21H, 20HMOV DPTR,#3456H解:分析如下:MOV A, #30H ;(A)=30HMOV 4FH, A ;(4FH)=30HMOV R0, #20H ;(R0)=20HMOV @R0, 4FH ;((R0)) =(20H)=(4FH)=30HMOV 21H, 20H ;(21H)=(20H)=30HMOV DPTR,#3456H ;(DPTR)=3456H所以执行程序段后:(A)=30H,(4FH)=30H,(R0)=20H,(20H)=30H,(21H)=30H,(DPTR)=3456H52例4.2 将扩展RAM 2010H 中内容送扩展RAM 2020 单元中,用Keil C 集成开发环境进行调试。

解:(1)编程如下:ORG 0MOV DPTR,#2010H ;将16 位地址2010H 赋给DPTRMOVX A,@DPTR ;读扩展RAM 2010H 中数据至累加器AMOV DPTR,#2020H ;将16 位地址2020H 赋给DPTRMOVX @DPTR,A ;将累加器A 中数据送入外RAM 2020H 中END(2)按第4 章所学知识,编辑文件与编译好上述指令,进入调试界面,设置好被传送地址单元的数据,如66H,如图4.6 所示。

图4.6 程序执行前,设置2010H 地址单元内容与2020H 地址单元的状态单步或全速执行这4 条指令,观察程序执行后2010H 地址单元内容的变化。

53图4.7 程序执行后,2010H 地址单元内容与2020H 地址单元内容的变化从图4.6 和图4.7 可知,传送指令执行后,传送目标单元的内容与被传送单元的内容一致,同时,被传送单元的内容也不会改变。

单片微机原理与接口技术(第2版)-基于STC15系列单片机(习题部分与答案)(3)

单片微机原理与接口技术(第2版)-基于STC15系列单片机(习题部分与答案)(3)

单片微机原理与接口技术-基于STC15系列单片机(第2版)习题部分第1章一、填空题1. 125= 01111101B= 7d H=( 0001 0010 0101)8421BCD码=(0110001 0110010 0110101)ASCII码。

2. 微型计算机由CPU、存储器、I/O 接口以及连接他们的总线组成。

3. 微型计算机的CPU是通过地址总线、数据总线、控制总线与外围电路进行连接与访问的,其中,地址总线用于CPU寻址,地址总线的数据量决定CPU的最大寻址能力;数据总线用于CPU与外围器件爱存储器、I/O接口)交换数据,数据总线的数量决定CPU一次交换数据能力;控制总线用于确定CPU与外围器件的交换数据的类型。

4. I/O 接口的作用是CPU与输入/输出设备的连接桥梁,相当于一个数据转换器。

5. 按存储性质分,微型计算机存储器分为_ _程序存储器______和数据存储器两种类型。

6. 16位CPU是指数据总线的位数为16位。

7 若CPU地址总线的位数为16,那么CPU的最大寻址能力为64K 。

8. 微型计算机执行指令的顺序是按照在程序存储中的存放顺序执行的。

在执行指令时包含取指、指令译码、执行指令三个工作过程。

9. 微型计算机系统由微型计算机和输入/输出设备组成。

10. 微型计算机软件的编程语言包括高级语言、汇编语言和机器语言三种类型。

二、选择题1.当CPU的数据总线位数为8位时,标志着CPU一次交换数据能力为D。

A. 1位B. 4 位C. 16位D. 8位2. 当CPU地址总线为8位时,标志着CPU的最大寻址能力为 C 。

A. 8个空间B. 16个空间C. 256个空间D. 64K个空间3. 微型计算机程序存储器空间一般由 A 构成。

A. 只读存储器B. 随机存取存储器4. 微型计算机数据存储器空间一般由 B 构成。

A. 只读存储器B. 随机存取存储器三、判断题1. 键盘是微型计算机的基本组成部分。

STC15F2K60S2单片机定时器编程

STC15F2K60S2单片机定时器编程

STC15F2K60S2单片机定时器编程一、STC15F2K60S2 单片机定时器概述STC15F2K60S2 单片机内部集成了 5 个定时器,分别是 2 个 16 位的定时器/计数器 T0 和 T1,2 个 8 位的定时器 T2 和 T3,以及 1 个独立波特率发生器定时器T4。

这些定时器都具有不同的特点和应用场景。

T0 和 T1 是传统的 16 位定时器/计数器,可以工作在定时模式和计数模式。

在定时模式下,通过设置定时器的初值和溢出周期,可以实现精确的定时功能;在计数模式下,可以对外部脉冲进行计数。

T2 和 T3 是 8 位定时器,具有自动重载功能,使用起来更加方便。

T4 是独立波特率发生器定时器,主要用于串行通信中的波特率设置。

二、定时器的工作模式1、定时模式在定时模式下,定时器对内部的系统时钟进行计数。

通过设置定时器的初值和溢出周期,可以实现不同时长的定时功能。

例如,如果系统时钟频率为 12MHz,要实现 1ms 的定时,我们可以计算出定时器的初值为 65536 1000,然后将初值写入定时器的寄存器中。

2、计数模式在计数模式下,定时器对外部引脚输入的脉冲进行计数。

当计数值达到设定的阈值时,产生溢出中断。

三、定时器的相关寄存器1、定时器控制寄存器(TCON)TCON 寄存器用于控制定时器的启动、停止、溢出标志等。

例如,TR0 和 TR1 位分别用于控制 T0 和 T1 的启动和停止,TF0 和 TF1 位则分别表示 T0 和 T1 的溢出标志。

2、定时器模式寄存器(TMOD)TMOD 寄存器用于设置定时器的工作模式和计数方式。

例如,可以通过设置 TMOD 寄存器的某些位来选择定时器是工作在定时模式还是计数模式,以及是 8 位模式还是 16 位模式。

3、定时器初值寄存器(TH0、TL0、TH1、TL1、TH2、TL2、TH3、TL3)这些寄存器用于存储定时器的初值。

在定时模式下,通过设置初值可以控制定时器的溢出周期;在计数模式下,初值则决定了计数的阈值。

8 STC15F2K60S2单片机的定时器计数器 例题

8 STC15F2K60S2单片机的定时器计数器 例题

第8章STC15F2K60S2单片机的定时/计数器例题例8.1用T1方式0实现定时,在P1.0引脚输出周期为10mS的方波。

解:根据题意,采用T1方式1进行定时,因此,(TMOD)=00H。

因为方波周期是10mS,因此T1的定时时间应为5mS,每5mS时间到就对P1.0取反,就可实现在P1.0引脚输出周期为10mS的方波。

系统采用12M晶振,分频系数为12,即定时脉钟周期为1μS,则T1的初值为:X = M -计数值= 65536 - 5000 = = 60536 =EC78H即:TH1 = ECH,TL1 = 78H。

(1)查询方式实现:ORG 0000HMOV TMOD,#00H ;设T1为方式1定时模式MOV TH1,#0ECH ;置5mS定时的初值MOV TL1,#78HSETB TR1 ;启动T1Check_TF1:JBC TF1,Timer1_Overflow ;查询计数溢出SJMP Check_TF1 ;未到5mS继续计数Timer1_Overflow:CPL P1.0 ;对P1.0取反输出SJMP Check_TF1 ;未到1s继续循环END(2)中断方式实现:ORG 0000HLJMP MAIN ;上电复位后,转MAINORG 001BHLJMP Timer1_ISR ;T1中断响应后,转Timer1_ISRORG 0100HMAIN:MOV TMOD,#00H ;设T1为方式1定时模式MOV TH1,#0ECH ;置5mS定时的初值MOV TL1,#78HSETB ET1154SETB EA ;开放中断SETB TR1 ;启动T1SJMP $ ;原地踏步,模拟主程序Timer1_ISR:CPL P1.0 ;对P1.0取反输出RETI ;中断返回,回到主程序执行SJMP $END155例8.2 用定时/计数器扩展外部中断。

解:当实际应用系统中有两个以上的外部中断源,而片内定时/计数器未使用时,可利用定时/计数器来扩展外部中断源。

5 STC15F2K60S2单片机的程序设计 例题

5 STC15F2K60S2单片机的程序设计 例题

MOV A, @R0
;取被传送数据
MOVX @DPTR, A
INC R0
;指向下一个被传送地址
INC DPTR
;指向下一个传送目标地址
CJNE A, #24H, LOOP0 ;判断是否为“$”字符(ASCII 码为 24H),若不是继续
SJMP $
;是“$”字符,停止传送
END
94
例 5.10 编程将扩展 RAM1000H 为起始地址的 16 个数据传送到片内基本 RAM20H 为起 始地址的单元中。
LCALL DELAY
;调用起始地址为 2200H 的子程序
END
解:经 EQU 定义后,AA 等效于 R1,DATA1 等效于 10H,DELAY 等效于 2200H,该程
序在汇编时,自动将程序中 AA 换成 R1、DATA1 换成 10H、DELAY 换成 2200H,再汇编为
机器代码程序。
使用赋值伪指令 EQU 的好处在于程序占用的资源数据符号或寄存器符号用占用源的英
2
1/6μs
DELAY2:
NOP
1
NOP
1
DJNZ R2,DELAY2
4
1/12μs 1/12μs 1/3μs






DJNZ R1,DELAY1
4
1/3μs
RET
4
1/3μs
96
例 5.12 编程实现 C=a2+b2。设 a、b 均小于 10 且分别存于扩展 RAM 的 1000H、1001H 单元,要求运算结果 C 存于外部 RAM1002H 单元。
JMP @A+DPTR
;转到分支表该分支的对应入口处

STC15F2K60S2单片机中断系统 例题

STC15F2K60S2单片机中断系统 例题

ORG 0100H MAIN:
MOV SP,#60H SETB IT0 SETB EX0 SETB EA LOOP: MOV A, P1 ANL A,#15H JNZ Trouble CLR P1.7 SJMP LOOP Trouble: SETB P1.7
;设定堆栈区域 ;设定外部中断 0 为下降沿触发方式 ;开放外部中断 0 ;开放总中断
void int0_isr( ) interrupt 0
{
Pl = i;
i <<= 1 ; if(i==0) i = 0xfe;
//移位 8 次后,i 将变为 0,需要重新赋值
} /*------------------------ 主函数------------------------*/
139
void main(void) {
汇编语言参考程序如下:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_ISR
ORG 0l00H
MAIN:
MOV A,#0FEH ;设置 LED 灯起始驱动信号
SETB IT0
;设置外部中断 0 为下降沿触发方式
SETB EX0
;开放外部中断 0
SETB EA
;开放总中断
SJMP $
;读取 P1 口中断输入信号 ;截取中断输入信号 ;有中断请求,转 Trouble,熄灭正常工作指示灯 LED3 ;无中断请求,点亮 LED3 ;循环检查与判断
;熄灭 LED3
141
SJMP LOOP
;循环检查与判断
INT0_ISR:
JNB P1.0,No_Trouble_0 ;查询 0 号故障源,无故障转 No_Trouble_0,熄灭 LED0

10 STC15F2K60S2系列单片机的AD转换器 例题

10 STC15F2K60S2系列单片机的AD转换器 例题
MOV R2,#249
DELAY_LOOP:
DJNZ R2,DELAY_LOOP
DJNZ R3,DELAY_LOOP1
DJNZ R4,DELAY_LOOP0
POP 04;恢复现场
CPL A
MOV P3, A;低8位送P2口LED灯显示
MOVADC_CONTR,#89H;重新启动A/D转换
RETI
DELAΥ:
PUSH 02;将寄存器组0的R2、R3、R4入栈
PUSH 03
PUSH 04
MOV R4,A;取最外循环的循环次数
DELAY_LOOP0:
MOV R3,#200
DELAY_LOOP1:
汇编语语言参考程序如下:
$INCLUDE(STC15F2K60S2.INC)
;包含STC15F2K60S2单片机寄存器定义文件,若无现成的STC15F2K60S2.INC文件,
;则可以用“EQU”和“DATA”直接对A/D转换用到的新增特殊功能寄存器进行定义
ADC_DATAEQU 30H;定义A D转换结果保存单元
ADC_CONTR=0x81;//清A/D转换结束标志位
adc_data=ADC_RES;//保存A/D转换结果
P2=~ADC_RES;//送P2口LED灯显示
}
}
例10.2编程实现利用STC15F2K60S2单片机ADC通道1采集外部模拟电压信号,10位精度,·采用中断方式进行转换,并将转换结果保存于30H和31H单元中,并送P3和P2口LED灯显示(低电平驱动),P3口LED灯显示最高2位,P2口LED灯显示低8位。设时钟频率为18.432MHz。
MOV ADC_DATA,A;保存A/D转换结果
CPL A

6 STC15F2K60S2单片机的存储器与应用编程 例题

6 STC15F2K60S2单片机的存储器与应用编程 例题

第6章STC15F2K60S2单片机存储器的应用6.1STC15F2K60S2单片机的程序存储器例6.1 设P1口驱动8只LED灯,低电平有效。

从P1口顺序输出“E7H、DBH、BDH、7EH、3EH、18H、00H、FFH”等8组数据,周而复始。

解:首先将这8组数据要存放程序存储器中,在汇编编程时,采用“DB”伪指令对这8组数据进行存储定义;在C51编程时,采用数组并定义为“code”存储类型。

(1)汇编语言参考程序ORG 0000HLJMP MAINORG 0100HMAIN:MOV DPTR, #ADDR ;DPTR指向数据存放首址MOV R3, #08H ;顺序输出显示数据次数,分8次传送LOOP:CLR A ;A清零,DPTR直接指向读取数据所在地址处MOVC A, @A+DPTR ;取数MOV P1, A ;送P1口显示INC DPTR ;DPTR指向下一个数据LCALL DELAY ;调延时子程序DJNZ R3,LOOP ;判断一个循环是否结束,若没有,取、送下一个数据; SJMP MAIN ;若结束,重新开始DELAY:…;延时子程序,由读者自己完成。

…RET ;子程序必须由RET指令结束ADDR:DB 0E7H,0DBH,0BDH,7EH,3EH,18H,00H,0FFH ;定义存储字节数据END122(2)C51参考程序#include <REG51.H>unsigned char code dis[8] = {0xe7,0xdb,0xbd,0x7e,0x3e,0x18,0x00,0xff}; // 定义显示数据/*――――――――延时子函数――――――――――*/void delay(unsigned int k) /*定义延时子函数*/{unsigned int i, j;for(i = 0; i<k; i++){for(j=0; j<121; j++){;}}}/*――――――――主函数――――――――――*/void main(void){unsigned char i;while(1) // 无限循环{for(i = 0; i<8; i++) //顺序输出8此{P1 = dis[i]; // 取存在程序存储器中的数据delay(50); //设置显示间隔,晶振频率不同时,时间可能不一样,自行调整}}}1236.2STC15F2K60S2单片机的基本RAM例6.2 采用不同的寻址方式,将数据00H写入低128字节00H单元。

12 STC15F2K60S2系列单片机的SPI接口 例题

12 STC15F2K60S2系列单片机的SPI接口 例题

/*-----------------定义 SPI 控制位----------------*/
#define SPIF
0x80
//SPSTAT.7
#define WCOL 0x40
//SPSTAT.6
#define SSIG
0x80
//SPCTL.7
#define SPEN
0x40
//SPCTL.6
SPIF
EQU 080H
;SPSTAT.7
WCOL
EQU 040H
;SPSTAT.6
SSIG
EQU 080H
;SPCTL.7
SPEN
EQU 040H
;SPCTL.6
DORD
EQU 020H
;SPCTL.5
MSTR
EQU 010H
;SPCTL.4
1
CPOL CPHA SPDHH SPDH SPDL SPDLL SPISS
RECV_UART: JNB RI, $ CLR RI MOV A, SBUF RET RET
;等待接收数据 ;清“0”RI 标志
;取串行接收数据
SPI_SWAP:
#ifdef MASTER
CLR SPISS
;拉低从机/SS
#endif
MOV SPDAT, A
;触发 SPI 发送
WAIT:
MOV A, SPSTAT
第 12 章 STC15F2K60S2 单片机的 SPI 接口
例题
例 12.1 计算机通过 RS232 串口向主单片机发送一串数据,主单片机的串口每收到一个 字节就立刻将收到的字节通过 SPI 口发送到从单片机中;同时,主单片机收到从单片机发回 的一个字节,并把收到的这个字节通过串口发送到计算机。可以使用串口助手观察结果。

第5章 STC15F2K60S2单片机中断系统

第5章 STC15F2K60S2单片机中断系统
精品课件
5.3 中断允许及其优先级管理
STC15F2K60S2单片机的中断允许控制及优先级控制 分别由中断允许寄存器IE、IE2、INT_CLKO(AUXR2)以 及中断优先级控制寄存器IP、IP2等控制。
5.3.1 中断允许寄存器 STC15F2K60S2单片机中的各中断源是否开放或禁止,
是由内部的中断允许寄存器IE、IE2、INT_CLKO控制。中 断采用两级控制方式,即总中断和各中断源分别独立控制。
精品课件
➢TF1:定时/计数器T1的溢出中断标志位。当启动T1计数 后,从初值开始计数,当产生溢出后由硬件将TF1置1,向 CPU请求中断,一直保持到CPU响应中断时,才由硬件清0, TF1也可由软件清0。 ➢TR1:定时/计数器T1的运行控制位。当TR1为1 时运行, 为0时停止运行。 ➢TF0:定时/计数器T0溢出中断标志。其功能与TF1类似。 ➢TR0:定时/计数器T0的运行控制位。其功能与TR1类似。
精品课件
➢TI:串行口1发送中断标志。串行口1以方式0发送时,每 当发送完8位数据,由硬件置1;若以方式1、方式2或方式3 发送时,在发送停止位的开始时置1。TI为1表示串行口已发 送一帧数据,串行口1正在向CPU申请中断(发送中断)。值得 注意的是,CPU响应发送中断请求,转向执行中断服务程序 时并不将TI清0,TI必须由用户在中断服务程序中清0。
精品课件
STC15F2K60S2 单片机中断系统结
构示意图
精品课件
5.2.2 中断源标志寄存器
1. TCON寄存器 TCON寄存器为定时/计数器T0、T1的控制寄存器,该
寄存器包括了T0和T1的溢出中断请求标志位TF0和TF1,也 包括了外部中断0(INT0)和外部中断1(INT1)的中断请 求标志位IE0和IE1,以及外部中断0和外部中断1的中断源的 触发方式。TCON寄存器的字节地址为88H,可位寻址,其 格式如下:

STC15F2K60S2系列单片机的PCA与PWM 例题

STC15F2K60S2系列单片机的PCA与PWM 例题

;定义一个计数器,用来计数模块 0 5mS 中断的次数
ORG 0000H
LJMP MAIN
ORG 003BH
LJMP PCA_interrupt
MAIN:
ORG 0050H CLR LED_MCU_START MOV SP, #7FH MOV Counter,#0 LCALL PCA_Initiate
;设置 PCA 模块 0 为 16 位软件定时器
;开放 PCA 模块 0 中断
EA
;开放总中断
CR
;启动 PCA 计数器(CH,CL)计数
RET
PCA_interrupt∶ PUSH ACC PUSH PSW CPL LED_5mS_Flashing
4
;5mS 中断一次, 每次进中断将该灯状态取反
MOV A,#Channe0_5mS_L ;给[CCAP0H,CCAP0L]增加 5mS 所需计数值
;禁止 PCA 计数器溢出中断
CL,#00H
;设置 PCA 定时器计数的初始值
CH,#00H
CCAP0L,#Channe0_5mS_L ;给 PCA 模块 0 的 CCAP0L 赋定时初值
CCAP0H,#Channe0_5mS_H ;给 PCA 模块 0 的 CCAP0L 赋定时初值
CCAPM0,#49H
ADD A,CCAP0L
MOV CCAP0L,A
MOV A,#Channe0_5mS_H
ADDC A,CCAP0H
MOV CCAP0H, A
CLR CCF0
;清 0PCA 模块 0 的中断请求标志
INC Counter
;中断次数计数器+1
MOV A,Counter
CLR C

基于STCSTC15F2K60S2单片机的串口通讯

基于STCSTC15F2K60S2单片机的串口通讯

湖南科技大学信息与电气工程学院《单片机课程设计报告》题目:基于STCSTC15F2K60S2单片机的串口通讯专业:自动化班级:一班姓名:罗永恒学号: 1209010303指导教师:范小春2015年 6月 30日单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能〔可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路〕集成到一块硅片上构成的一个小而完善的电脑系统。

本文将具体介绍单片机与PC机进行串口通信的实现方法和编程方法,并且在最后给出一个实用的单片机与电脑通过串口通信的程序。

关键词:单片机串口通信第一章 STCSTC15F2K60S2的简介 01.1 STCSTC15F2K60S2的内部结构框图 01.2 STC15F2K60S的DIP封装图 01.3 STC15F2K60S的各引脚简介 (1)第二章单片机通过USB与PC机的通信设计 (3) (3)2.1.1 PC机同单片机通信存在的问题 (3)2.1.2 USB接口同RS-232(DB-9)串口的比较 (3)USB转接芯片的选择 (3)2.2 通信功能要求 (4)第三章硬件电路图的设计 (4) (4)3.2 USB与单片机连接主电路 (5)3.3 总电路图 (5)3.4 PCB图 (5)第四章程序设计 (6)4.1 串口初始化 (6)4.2 主程序 (6)4.3 中断服务程序 (7)4.4 总程序 (7)第五章总结与体会 (9)第六章参考文献 (10)第一章 STCSTC15F2K60S2的简介1.1 STCSTC15F2K60S2的内部结构框图1.2 STC15F2K60S的DIP封装图1.3 STC15F2K60S 的各引脚简介〔1〕电源引脚Vcc :一般接电源的+5V 。

具体的电压幅度应参考单片机的手册。

STC15F2K60S2单片机在高频整流模块中的应用设计

STC15F2K60S2单片机在高频整流模块中的应用设计

234 •电子技术与软件工程 Electronic Technology & Software Engineering单片机技术 • SCM Technology【关键词】STC15F2K60S2单片机 整流模块智能化 PWM 当前,随着我国现代科学技术的发展以及生产水平的不断进步,各行各业的智能化程度也越来越高,需要用到的电力设备越来越复杂,对供电质量的要求也就越来越严格。

同时单片机技术的发展及广泛应用使操作电源的自动化程度大大提高,因此,智能化是电力供电模块发展的必然趋势。

而基于单片机控制的高频整流模块作为一种高品质的电力电源装置,为国民生产的供电可靠性提供了有力的保障,并可实现四遥、组网功能以满足无人值守的需要。

本文主要讨论的是STC15F2K60S2单片机在高频整流模块中的控制作用设计,通过硬件、软件设计,实现开关电源的整流模块智能化,是单片机技术在电力电源装置中的一种应用。

1 高频整流模块工作原理高频整流模块的主要作用是将三相交流电整定成为具有额定电压的直流电,向各种直流负载供电,是智能开关电源系统中最基本的组成部件。

其工作原理如图1所示,三相交流输入首先进行防雷处理和EMI 滤波,然后经整流转换成高压直流,再通过全桥PWM 电路逆变为高频交流,经高频变压器隔离降压后通过高频整流滤波成为直流电,最后经EMI 滤波和防反接保护输出。

2 STC15F2K60S2单片机在整流模块应用中的硬件设计在本设计中,根据图2结构框图,用STC15F2K60S2单片机控制系统的脉宽调制,通过采样EMI 滤波后的电压、电流值,给定整流模块的输出电压基准和输出限流基准;控制整流模块开关机;测量整流模块的输出电压和电流并利用数码管显示;并根据故障总线的信号上报故障。

该控制电路中,晶振频率为11.0592MHZ ,STC15F2K60S2单片机内部高可靠复位,8级可选复位门槛电压,彻底省掉外部复位电路。

STC15F2K60S2单片机基本结构与系统典型构成

STC15F2K60S2单片机基本结构与系统典型构成
功能:为用户提供丰富的位操作功能,有相应的指令系统, 硬件有自己的“累加器”(进位位C,即CY),和自己的位 寻址RAM和I/O空间,是一个独立的位处理机。
大部分位操作均围绕着其累加器——进位位C完成。对 任何可直接寻址的位,布尔处理机可执行置位、取反、转 移、位的读写等操作。在任何可寻址的位(或该位内容取 反)和进位标志C之间,可执行逻辑与、或操作,其结果 送回到进位标志C。
20
2、存储器的结构—STC15F2K60S2 结构特点:程序存储器和数据存储器的寻 址空间是分开的。 结构划分:片内集成有4个物理上相互独立 的 存 储 器 空 间 : 程 序 Flash 存 储 器 、 数 据 Flash存储器(EEPROM)、内部数据存储 器和外部数据存储器。
21
F000H
5
STC15F2K60S2单片机内部结构框图
B寄存器
XRAM 1792字节
RAM地址 寄存器
RAM 256字节
ACC TMP2
TMP1
ALU
PSW
堆栈指针
定时器/计数器0/1/2 串口1
看门狗 (WDT)
串口2
数据Flash 存储器
程序存储器
ISP/IAP 地址生成器 程序计数器(PC)
PCA/PWM
19
数据指针DPTR
一 个 16 位 专 用 寄 存 器 , 由 DPL ( 低 8 位 ) 和 DPH(高8位)组成。 DPTR 可 以 直 接 进 行 16 位 操 作 , 也 可 分 别 对 DPL和DPH按字节进行操作。 STC15F2K60S2单片机有两个16位的数据指针 DPRT0和DPTR1,这两个数据指针共用同一个 地址,可通过设置辅助寄存器AUXR1中的DPS (AUXR1.0)位来选择具体使用哪一个数据指 针。

【2019年整理】基于STC15F2K60S2单片机开发板设计制作

【2019年整理】基于STC15F2K60S2单片机开发板设计制作

基于STC15F2K60S2单片机开发板设计制作摘要单片机开发板的介绍单片机开发板是一块电路板和诸多元器件组合在一起供平时的学习、实验、开发等使用;是正式批量生产产品前,对产品进行设计和开发时使用的板子。

我们学习单片机,开始是对理论知识的学习,学习了一些指令和相关单片机结构的知识,而单片机开发板就是我们实践的工具,通过开发板我们可以做一些实验,从而掌握所学的知识。

打个比较通俗的例子:我们编写的代码是“软件”,而开发板是“硬件”,两者结合才会有用,如果只有代码,只有模拟的实验结果而不经过板子实践是学不好的,也掌握不了单片机。

简单概括说开发板实际上就是个多功的实验板,是学习单片机和开发单片机产品的好帮手。

上面集成了好多单片的的外围器件,如LED灯、数码管、按键、行列式按键、步进电机、伺服电机、液晶显示等等,利用一个开发板就可以编制不同的程序实现各种各样的功能,不用为了一个实验焊一块电路板了。

在开发板上设计、调试好程序,就能方便地移植到产品上,只是有时要作适当的修改,比如端口的设置等,因为毕竟开发板和产品的电路板不可能完全一致的。

这样我们就可以通过开发板的使用节省大量的资源,提高我们的学习效率。

为我们更好的学习单片机提供一个良好的平台。

国内外发展趋势现在可以说是单片机的战国时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天地。

纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:1、低功耗CMOS化MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。

像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章STC15F2K60S2单片机的程序设计例题例5.1 分析ORG在下面程序段中的控制作用ORG 1000HSTART:MOV R0,#60HMOV R1,#61H……ORG 1200HNEXT:MOV DPTR,#1000HMOV R2,#70H……解:以START开始的程序汇编后机器码从1000H单元开始连续存放,不能超过1200H 单元;以NEXT开始程序汇编后机器码从1200H单元开始连续存放。

例5.2 分析END在下面程序段中的控制作用。

START:MOV A,#30H……END STARTNEXT:……RET解:汇编程序对该程序进行汇编时,只将END伪指令前面的程序转换为对应的机器代码程序,而以NEXT标号为起始地址的程序将予以忽略。

因此,若NEXT标号为起始地址的子程序是本程序的有效子程序的话,应将整个子程序段放到END伪指令的前面。

例5.3 分析下列程序中EQU指令的作用AA EQU R1 ;给AA赋值R1DA TA1 EQU 10H ;给DA TA1赋值10HDELAY EQU 2200H ;给DELAY赋值2200HORG 2000HMOV R0,DATA1 ;R0←(10H)MOV A,AA ;A←(R1)LCALL DELAY ;调用起始地址为2200H的子程序END解:经EQU定义后,AA等效于R1,DATA1等效于10H,DELAY等效于2200H,该程序在汇编时,自动将程序中AA换成R1、DATA1换成10H、DELAY换成2200H,再汇编为机器代码程序。

使用赋值伪指令EQU的好处在于程序占用的资源数据符号或寄存器符号用占用源的英文或英文缩写字符名称来定义,后续编程中凡是出现该数据符号或寄存器符号就用该字符名称代替,这样,采用有意义的字符名称进行编程,更容易记忆和不容易混淆,也便于阅读。

例5.4 试将8位二进制数据转换为十进制(BCD码)数据。

解:8位二进制数据对应的最大十进制数是255,说明一个8位二进制数据需要3位BCD 码来表示,既百位数、十位数与个位数。

如何求解呢?(1)用8位二进制数据减100,够减百位数加1,直至不够减为止;再用剩下的数去减10,够减十位数加1,直至不够减为止;剩下的数即为个位数。

(2)用8位二进制数据除以100,商为百位数,再用余数除以10 ,商为十位数,余数为个位数。

很显然,第(1)种方法更复杂,应选用第(2)种算法。

设8位二进制数据存放在20H 单元,转换后十位数、个位数存放在30H单元,百位数存放在31H单元。

参考程序如下:ORG 0000HMOV A, 20H ;取8位二进制数据MOV B, #100DIV AB ;转换数据除以100,A为百位数MOV 31H, A ;百位数存放在31H单元MOV A, B ;取余数MOV B, #10DIV AB ;余数除以10,A为十位数,B为个位数SW AP A ;将十位数从低4位交换到高4位ORL A, B ;十位数、个位数合并为压缩BCD码MOV 30H, A ;十位数、个位数存放在30H(高4位为十位数,低4位为个位数)SJMP $END例5.5 求8位有符号数的补码。

设8位二进制数存放在片内RAM 30H单元内。

解:对于负数的补码为除符号位以外取反加1,而正数的补码就是原码,因此,关键的地方是判断数据的正负,最高位为0,表示为正数,最高位为1,表示为负数。

参考程序如下:ORG 0000HMOV A,30HJNB ACC.7,NEXT ;为正数,不进行处理CPL A ;负数取反ORL A,#80H ;恢复符号位INC A ;加1MOV 30H,ANEXT:SJMP NEXT ;结束END例5.6 试编写计算下式的程序:100 (X≥0)Y =-100 (X < 0)解:该例是一个双分支程序,本题关键是判断X是正数,还是负数?判断方法同例5.5。

设X存在40H单元中,结果Y存放于41H中。

程序流程图如图5.5所示。

图5.5 例5.6程序流程图参考程序如下:X EQU 40H ;定义X的存储单元Y EQU 41H ;定义Y存储单元ORG 0000HMOV A,X ;取XJB ACC.7,BRANCH1 ;若ACC.7为1则转向BRANCH1,否则顺序执行MOV A,#64H ;X≥0,Y=100SJMP COMMON ;转向COMMON(分支公共处)BRANCH1:MOV A,#9CH ;X<0,Y= -100,把-100的补码(9CH)送A COMMON:MOV Y,A ;保存ASJMP $;程序结束END例5.7 设各分支的分支号码从0开始按递增自然数排列,执行分支号存放在R3中,编写多分支处理程序。

解:首先,在程序存储器中建立一个分支表,分支表中按从0开始的分支顺序从起始地址(表首地址,如TABLE)开始存放各分支的一条转移指令(AJMP或LJMP,AJMP占用2个字节,LJMP占用3个字节),各转移指令的目标地址就是各分支程序的入口地址。

根据各分支程序的分支号,转移到分支表中对应分支的入口处,执行该分支的转移指令,再转到分支程序的真正入口处,从而执行该分支程序。

参考程序如下:ORG 0000HMOV A, R3 ;取分支号RL A ;分支号乘2,若分支表中用LJMP,则改分支号乘3MOV DPTR, #TABLE ;分支表表首地址送DPTRJMP @A+DPTR ;转到分支表该分支的对应入口处TABLE:AJMP ROUT0 ;分支表,采用短转移指令,每个分支占用2个字节AJMP ROUT1 ;各分支在分支表的入口地址=TAB+分支号×2AJMP ROUT2……ROUT0:……;分支0程序LJMP COMMON ;分支程序结束后,转各个分支的汇总点ROUT1:……;分支1程序LJMP COMMON ;分支程序结束后,转各个分支的汇总点ROUT2:……;分支2程序LJMP COMMON ;分支程序结束后,转各个分支的汇总点……COMMON:SJMP COMMON ;各个分支的汇总点END注意:不管哪个分支程序执行完毕后,都必须回到所有分支公共回合处,如各分支程序中的“LJMP COMMON”指令。

BUFFER的存储区域内,并统计传送字符的个数,直到发现空格字符停止传送。

解:题目中已明确发现空格字符时就停止传送,因此,编程时应先对传送数据进行判断,再决定是否传送。

设DATA为20H,BUFFER为0200H,参考程序如下:ORG 00000HDA TA EQU 20HBUFFER EQU 0200HMOV R2, #00H ;统计传送字符个数计数器清零MOV R0, #DATA ;设置源操作数指针MOV DPTR, #BUFFER ;设置目标操作数指针LOOP0:MOV A, @R0 ;取被传送数据CJNE A, #20H, LOOP1 ;判断是否为空格字符(ASCII码为20H)SJMP STOP ;是空格字符,停止传送LOOP1:MOVX @DPTR, A ;不是空格字符,传送数据INC R0 ;指向下一个被传送地址INC DPTR ;指向下一个传送目标地址INC R2 ;传送字符个数计数器加1SJMP LOOP0 ;继续下一个循环STOP:SJMP $ ;程序结束ENDBUFFER的存储区域内,字符串的结束字符是“$”。

解:程序功能与例5.8基本一致,但字符串的结束字符“$”是字符串中的一员,也是需要传送的,因此,编程时应先传送,再对传送数据进行判断,以判断字符串数据传送是否结束。

设DATA为20H,BUFFER为0200H,参考程序如下:DA TA EQU 20HBUFFER EQU 0200HORG 0000HMOV R0, #DATAMOV DPTR, #BUFFERLOOP0:MOV A, @R0 ;取被传送数据MOVX @DPTR, AINC R0 ;指向下一个被传送地址INC DPTR ;指向下一个传送目标地址CJNE A, #24H, LOOP0 ;判断是否为“$”字符(ASCII码为24H),若不是继续SJMP $ ;是“$”字符,停止传送END例5.10 编程将扩展RAM1000H为起始地址的16个数据传送到片内基本RAM20H为起始地址的单元中。

解:本例中,数据传送的次数是固定的,为16次;因此,可用一个计数器来控制循环体程序的执行次数。

既可以用加1计数来实现控制(采用CJNE指令),也可以采用减1计数来实现控制(采用DJNZ指令)。

一般情况下,采用减1计数控制居多。

参考程序如下:ORG 0000HMOV DPTR,#1000H ;设置被传送数据的地址指针MOV R0,#20H ;设置目的地地址指针MOV R2,#10H ;用R2作计数器,设置传送次数LOOP:MOVX A,@DPTR ;取被传送数MOV @R0,A ;传送到目的地INC DPTR ;指向下一个源操作数地址INC R0 ;指向下一个目的操作数地址DJNZ R2,LOOP ;计数器R2减1,不为0继续,否则结束传送SJMP $END例5.11 已知单片机系统的系统时钟频率12MH Z,试设计一软件延时程序,延时时间为10ms。

解:软件延时程序是应用编程中的基本子程序,是通过反复执行空操作指令(NOP)和循环控制指令(DJNZ)占用时间来达到延时目的的。

因为执行一条指令的时间非常短,一般都需要采用多重循环才能满足要求。

参考程序如下:源程序系统时钟数占用时间DELAY:MOV R1,#100 2 1/6μsDELAY1:MOV R2,#200 2 1/6μsDELAY2:NOP 1 1/12μsNOP 1 1/12μsDJNZ R2,DELAY2 4 1/3μsDJNZ R1,DELAY1 4 1/3μsRET 4 1/3μs外循环内循环。

相关文档
最新文档