合泰单片机总结

合泰单片机总结
合泰单片机总结

合泰单片机总结

--测试环境C编译器V2 1.Debug

2.

3..数组,支持一维/二维数组(大小小于1 bank);

4.使用const关键字,变量将存储于程序存储区,如,const uint8_t tab[] = “1,2,3”;

5.中断服务函数:

#pragma vector ISR_tmr0 @ 0x0c //定义中断入口地址

void ISR_tmr0(void)

{

tick++ ;}

6.中断函数中调用普通函数

(1)方法1

#pragma vector ISR_tmr0 @ 0x0c

#pragma nolocal fun

fun()

{

}

void ISR_tmr0(void)

{

fun() ;

}

(2)方法2

#pragma vector ISR_tmr0 @ 0x0c

fun()

{

}

void ISR_tmr0(void)

{

#asm

call _fun;

#endasm

}

7.宏定义

#define _pa0 _12_0 //bit 0 of RAM address 0x12

8.位变量定义

对于有多个bank的MCU,位变量只能定义在bank0,使用如下方式

#pragma rambank0

bit flag ;

#pragma norambank

9.指针

(1)不支持指向“字符串数组”

char *rainbow[] = { "red", "orange", "yellow" };// not supported

(2)只支持全局的静态函数指针,且所指函数不能带有参数

fun()

{

return 1;

}

int (*const p)() =fun; // global and initialization required

void main()

{

int a;

a=(*p)();

}

(3)不支持取得const常量的地址

const int ldc = 0;

void main(){

int *a;

a = &ldc; // cannot pass

}

10.内嵌汇编

#asm

[label:] opcode

[operands]

...

#endasm

Eg:

char a;

int b;

void fun(char p1,int p2)

{

a = p1;

#asm // b = p2;

MOV A,fun1

MOV _b,A

MOV A,fun1[1]

mov _b[1],A

#endasm

}

void main()

{

int d1;

char d2;

unsigned char q, r;

r = 0;

q = d1 / d2; // get quotient #asm // r = q;

MOV A, CR3 ; CR3→q MOV CR4,A ; CR4→r

#endasm

#asm // fun(d2,d1)

MOV A,CR2

MOV fun0,A ; p1 = d2 MOV A,CR1

MOV fun1,A

MOV A,CR1[1]

MOV fun1[1],A ; p2 = d1 CALL _fun

#endasm

}

11.预编译指令

12.编译器特殊选项

13.内嵌函数

14.注意事项

用合泰单片机控制2个LED亮度,有51的程序。然后移植到了合泰单片机上 功能都一样的

如何移植一个51的程序到合泰单片机 下面是一个51的程序,通过一个按键控制2个LED灯的亮暗: #include #define uchar unsigned char #define uint unsigned int sbit button=P3^0; sbit cold=P1^2; sbit hot=P1^0; uchar flag,ZKBH,ZKBC,m=0,m1=0; bit eavalue,trvalue; long int keytime=0; uchar code tableh[5][5]={{0,0,0,0,0},{5,10,15,20,25},{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50}}; uchar code tablec[5][5]={{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50},{5,10,15,20,25},{0,0,0,0,0}}; void init_sys(void); void Delay10Ms(); void tiaose(); void liangdu(); void keyscan(); void main() { eavalue=0; trvalue=0; flag=0; P1=0xff; init_sys(); while(1) { ZKBH=tableh[m][m1]; ZKBC=tablec[m][m1]; keyscan(); /*得出了flag的值为长短按键选项*/ } } void init_sys(void) { TMOD=0X01; TH0=0XFF; TL0=0X9c; TR0=1; ET0=1; EA=1;

合泰单片机生成pwm

#include "HT66FU70A.h" #define RS _pc0 #define RW _pc1 #define E _pd6 float ad_shidu; //湿度变量 float ad_wendu; //温度变量 char Sunshine; //光照变量 char timer0_cnt; long int m; unsigned int temp=0; void ad_init(void) //A/D转换初始化 { //8分频;内部1.25V电压除能;内部参考电源电压来源于VDD _adcr1 = 0x03; //启动A/D转换模块(ADCR0寄存器第5位) _adoff = 0; } void ad_pa1(void) //pa1端口ad配置 { //定义PA1为A/D输入,即AN1 _pas0 = 0x30; //选择模拟通道AN1;ADC数据高字节是ADRH的第7位,低字节是ADRL的第4位_adcr0 = 0x01; } void ad_pa3(void) //pa3端口ad配置 { //定义PA1为A/D输入,即AN1 _pas1 = 0x30; //选择模拟通道AN1;ADC数据高字节是ADRH的第7位,低字节是ADRL的第4位_adcr0 = 0x03; } //开始进行ad转换 void ad_switch(void)

{ //ADCR0寄存器第七位 _start=1; //start位0->1->0,表示启动A/D转换 _start=0; } void pwn_1(void) { _pcc5=0; //输出 _pcpu5=1; //上拉 // _pc5 = 1; _pcs2 |= (2 << 4); //PC5 功能选择为TM1输出 // _tm1c1=0b10101000; // _tm1c0=0b00001111; _tm0c0 |= (0 << 4); //fsys/4 _tm0c0 |= (1 << 0); //CCRP:001b _tm0al = 0x3f; _tm0ah = 0x00; _tm0c1 |= (2 << 6); //PWM模式 _tm0c1 |= (2 << 4); //PWM 输出 _tm0c1 |= (1 << 3); //高有效 _tm0c1 &=~(1 << 1); //CCRP-周期CCRA-占空比_tm0c0 &=~(1 << 7); //运行定时器 _tm0c0 |= (1 << 3); //计数器On /*_tm0c0 |= (1 << 3); //计数器On*/ } void pwn_2(void) { _pcc6=0; //输出 _pcpu6=1; //上拉 // _pc5 = 1; _pcs3 |= (1 << 0); //PC5 功能选择为TM1输出 // _tm1c1=0b10101000; // _tm1c0=0b00001111; _tm0c0 |= (0 << 4); //fsys/4 _tm0c0 |= (1 << 0); //CCRP:001b _tm0al = 0x3f; _tm0ah = 0x00; _tm0c1 |= (2 << 6); //PWM模式 _tm0c1 |= (2 << 4); //PWM 输出 _tm0c1 |= (1 << 3); //高有效

合泰单片机串口通讯C语言

/*和泰单片机串口通许,已调试通过,抗干扰超强,一些标志及定时器请自己定义*/ unsigned char count_uartout;//发送计数器 unsigned cha datin_buf[4]; //接收寄存器4个 unsigned cha datout_buf[9]; //发寄存器9个 #define tongxun_in datin_buf[0] //接收送识辨码寄存器 #define tongxun_out datout_buf[0] //发送识辨码寄存器 #define send_max 8 //设发的数据个数 DEFINE_ISR (Interrupt_uart, 0x2c) //串口中断地址 { if(++count_uartin>3) count_uartin=0; if((_usr&0b11110000)==0) //判断是否出错 { if(_rx8) //接收到首数据 { tongxun_in=_txr_rxr; if(tongxun_in==0x5a) 首数据正常则 { b_sendero=0; //清除错误标志 count_uartin=0; //接收数据地址清零 tongxun_time=0; //通许计时器清0,tongxun_time为1S计时器,到1S则b_tongxun=1;表示接收错误。 b_tongxun=0; } else b_sendero=1; //接收的数据出错 } else //出错处理 { if(!b_sendero) datin_buf[count_uartin]=_txr_rxr; //接收的数据正常 else b_tongxun=_txr_rxr; //接收的数据出错,需读_txr_rxr清除_usr的错误标志 } } else b_tongxun=_txr_rxr;// //接收的数据出错,需读_txr_rxr清除_usr的错误标志 } //---------------------------------------------------

holtek单片机怎么样_holtek单片机有什么特点

holtek单片机怎么样_holtek单片机有什么特点 holtek盛群半导体为台湾省专业微控制器IC设计领导厂商,营业范围主要包括微控制器IC及其周边组件之设计、研发与销售。自1998年成立以来,公司不断致力于新产品的研发及技术的创新,加上对市场趋势的掌握,期能提供广大电子市场最具竞争力之IC产品。 holtek bs84c12A 单片机开发 开发环境搭建 编辑编译调试是官方的HT-IDE3000,仿真器用的Elink,单片机的程序用C开发,使用代理商提供的触摸按键库。(这些资料后面都整体好提供下载)。软件的安装什么就不说了,直接就讲怎么和自己的硬件连接,进行在线调试。 开发环境使用 关于IDE3000的使用,安装好后可以在软件的帮助部分,查看一些V3进行C语言编程的对应内容;ELink的话有个《Elink仿真器使用说明》,关键就是“”BS84C12A_20150807_LIBV413--V3“”这个软件包,后续的开发都在这个软件包的基础上进行(触摸按键调用这个软件包提供的库就方便实现按键功能),具体怎么使用这个软件包,可以看他对应的使用手册。 关于使用Elink在线仿真,要注意就是要使用对应的支持在线调试的芯片,比如选的BS84C12A 对应的仿真芯对应的EV芯片。 关于编程 使用上面提到的软件包进行编程,其实就是已经帮搭建好了框架,void USER_PROGRAM_INITIAL()这个函数里面就是硬件初始化,void USER_PROGRAM()函数就是单片机程序需要循环执行的内容。 自己开发过程中编程时候遇到的问题主要如下: 1,堆栈溢出。 解决,查数据手册可以知道,选的BS84C12A是硬件堆栈5层,调用的触摸按键库,它的

合泰单片机C语言教程

Holtek 微控制器應用範例–使用Holtek C 語言目錄 第一章內容簡介 第二章選定Holtek C 語言的使用環境 2.1 進入HT-IDE3000 建立新的專案時, 選定Holtek C 編譯器 2.2 已開啟專案後, 選用Holtek C 編譯器 第三章微控制器C 語言程式的速成 3.1 定義主函式main() 3.2定義副函式(sub-function) 3.3定義全域變數(global variable) 3.4定義中斷服務函式(Interrupt Service Routine : ISR) 3.5 其他 第四章 C 語言程式 4.1 C 程式架構 4.2 開始用C 語言設計一個程式 4.2.1 定義主函式main 4.2.2 將標頭檔引入(include a header file) 4.2.3 定義文字符號及變數 4.2.4 設定微控制器及裝置的初始狀態 4.2.5 設計子函式 4.2.6 設計中斷服務函式 4.3變數(variable) 及資料型態(data type) 4.3.1 變數名 4.3.2 資料型態 4.3.3 變數的有效範圍(scope) 4.3.4 變數的資料型態(data type)

整數型(integer) 浮點型(floating point) 4.3.5 bit 資料型態 4.3.6儲存類別(storage class) 與修飾詞(qualifier) 儲存類別(storage class) 修飾詞(qualifier) 4.3.7絕對變數(absolute variable) 4.3.8常數(constant) 4.3.9指標(pointer) 與陣列(array) 指標的運算子& 與* 陣列(array) 4.3.10結構(struct) 與等位(union) 結構的運算子-> 與. 4.4運算子(Operators) 運算前的型態轉換 4.5程式流程控制(program flow control) 4.5.1if-else 敘述 4.5.2switch 敘述 4.5.3for 敘述 4.5.4while 敘述 4.5.5do-while 敘述 4.5.6goto 敘述 4.5.7break 與continue 敘述 4.6函式(Functions) 4.6.1參數(arguments) 4.6.2返回值(return values) 4.7中斷服務函式(Interrupt Service Routines) 4.8在C 語言程式中嵌入組合語言(in-line assembly code) 從組合語言的程式去存取 C 語言的物件(變數) 4.9前置處理指令(Preprocessor) 4.9.1 定義文字符號(#define)

合泰单片机总结

合泰单片机总结 --测试环境C编译器V2 1.Debug 2. 3.. 数 组 , 支 持 一 维 /二维数组(大小小于1bank>;

使用const关键字,变量将存储于程序存储区,如,const uint8_t tab[] = “1,2,3”。b5E2RGbCAP 5.中断服务函数: #pragma vector ISR_tmr0 @ 0x0c //定义中断入口地址 void ISR_tmr0(void> { tick++ 。} 6.中断函数中调用普通函数 (1>方法1 #pragma vector ISR_tmr0 @ 0x0c #pragma nolocal fun fun(> { } void ISR_tmr0(void> { fun(> 。 } (2>方法2 #pragma vector ISR_tmr0 @ 0x0c fun(>

{ } void ISR_tmr0(void> { #asm call _fun。 #endasm } 7.宏定义 #define _pa0 _12_0 //bit 0 of RAM address 0x12 8.位变量定义 对于有多个bank的MCU,位变量只能定义在bank0,使用如下方式 #pragma rambank0 bit flag 。 #pragma norambank 9.指针 (1)不支持指向“字符串数组” char *rainbow[] = { "red", "orange", "yellow" }。// not supportedp1EanqFDPw (2)只支持全局的静态函数指针,且所指函数不能带有参数

合泰芯片休眠问题

合泰芯片休眠问题 由于公司产品需要低功耗,本人也是菜鸟,但是在网上要这方面的介绍但是不是很详细,所以本人就在边学习边调试,功夫不负有心人终于调试好了,以下是本人对合泰芯片休眠状态调试的心得,希望对初学合泰单片机的菜鸟们借鉴。也是对本人学习的巩固。 1.调试以前把PCB板上面的元器件都焊接好,保证调试板一定是OK的。 2.开始调试静态电流,把单片机取下来,看整个PCB板的静态电流是多少, 如果有其它的芯片配合的,先把芯片VDD断开,看看外围控制电路的电流是多少,如果外围静态电流大,就自己慢慢找,这里就不详细说明了。 3.外围电路电流达到你想要的值了,就可以开始单片机的设置了。 4.一般的休眠都有一个定时过程,起码要1分钟以上才能进入休眠吧,到合泰 芯片掩膜选项里面把看门狗关闭不用,注;(我这里是I/O脚唤醒,所以这样设置)。把要设定的唤醒口设置为wake-up 。然后再选择带上拉 pull-high。 5.再设定使用的I/O口,如果你把I/O口作为输入口就要带上拉 pull-high。如 果你把I/O口作为输出口,就不能带上拉。我知道由于控制需要有些I/O口一定要这样设置的,特别注意这里,因为这里会消耗几百uA电流的,把没有使用的I/O设置为输出口。或者在芯片内部没有引出了的也一样。 6.在进入休眠以前要把所使用的I/O口一定要按要求设置好,把init初始化里 面的特殊寄存器都要关闭,再进入休眠函数_halt();,如果单步进入函数程序,当程序运行到_halt();软件左下脚会显示“掉电模式”。程序会一直停留在这里,等待I/O口唤醒。 7.在休眠函数_halt();后面要把关闭掉的特殊寄存器按init初始的要求重新设定 好。注意;按前面的设置一样,要不然程序运行会不对的。只要按上面的要求设定好基本上是没有问题了。 8.如果还是不明白就联系我邮箱;liuyuron@https://www.360docs.net/doc/8f9931850.html,

合泰单片机的段码液晶显示程序

合泰单片机的段码液晶显示程序 //======================================================// // 煜日升电子(深圳)有限公司// // 产品名称: 全自动胶带机// // 产品型号: RS7001 Ver2.00 // // 微控制器: HT49R30A-1 // // 软件版本: 1.00 f or RC (2.8MHz) // // [ 2006-07-29 16:34:50 | Author: zmli ] // //======================================================// #include <ht49r30a-1.h> #include "RS7001RC.h" void main() { initial(); DispLCD(Length); while (1) { _clrwdt(); ScanKey(); ScanStart(); LengthSetup(); Start_End(); } } /* ============================ Delay ========================== */ void delay(unsigned char cnt) { unsigned char i,j; for (i=0;i<=cnt;i++) { for (j=0;j<=100;j++){ _clrwdt(); } _clrwdt(); } } /* ========================== Initial ========================== */ void initial(void)

合泰触摸单片机新建工程步骤(自编详细版)

合泰触摸系列单片机新建工程步骤(自编详细版) 第一步:新建一个工程文件夹,这里以BS83B12A-3单片机为实例,将文件夹命名为BS83B12A-3_Exam(根据工程项目自定义,无要求); 第二步:复制一些必要的文件(夹)到BS83B12A-3_Exam中,如图: 1.第一个文件夹“BS83B12A-LIBV413”是合泰官方触摸库文件,根据自 己对应的IC型号,直接复制即可;(文件夹名称不得改变) 2.第二个文件夹“MAIN_PROGRAM_V104”是程序的开始,每个工程都必 需使用的功能模块,主要功能有: IC硬件初始化(不同的 IC 型号,有不同的初始化程序); 功能初始化(调用所有被加入的功能模块的初始化程序); 载入触控软件包的参数; 执行每个功能模块的功能; 3.第三个文件夹“output”是自己新建的,用来存放程序的一些输出 文件,进入工程配置时制定输出路径需要用到; 4.第四个文件夹“USER_PROGRAM”是空的软件包,提供简单几条指 令范例及软件包的基础结构作为使用上的参考,使用者可在此软件包 內直接编写程序,开发新的应用功能,也可以套用此软件包的格式, 在编写完程序后,变更资料夹及其它档案的主档名,并适当修改其它 档案的內容,包裝成另一个新的软件包; 5.参数定义档介绍( TKS_GLOBE_VARIES.INC;TKS_GLOBE_VARIES.H) 参数定义档的功能是用來存放整个工程中可被设定或修改的参数,這 些参数都來自于所有被选用进来使用的每個軟件包(功能模块),例 如:一個工程中套用 UART_TEST;MAIN_PROGRAM;BS83B16A_LIBV413 三 個功能模块,則其所属的可设定参数,都會存放在参数定义档內!若 使用汇编程序開发,則参数在 TKS_GLOBE_VARIES.INC;若是 C程序 开发,則参数是存放在 TKS_GLOBE_VARIES.H ,使用者可视实际应用 在此档案內調整相关的参数,例如:感度;选项;Baudrate……等等,

合泰单片机

HT16K23带Key Input LCD驱动 文件编码:A N0276S 简介 HT16K23是一款带按键扫描功能的LCD驱动芯片,内建存储器及RC振荡电路,可同时驱 动20×1 Key与20×4 LCD,支持I2C标准接口,只需两条信号线便可完成与MCU的通信功 能。本文以HT68F30为主控MCU,通过I2C通信协议控制HT16K23读取按键Data以及控 制LCD显示,目的在于让用户更清楚地掌握HT16K23的特性和应用。 工作原理 方框图 图1 HT16K23内部框图

表1 HT16K23 RAM Mapping of 20×4 表2:HT16K23 RAM Mapping of 16×8 由图1可知:HT16K23是一款具有按键扫描功能的LCD驱动芯片,基本特性如下:?HT16K23工作电压:2.4V~5.5V ?内建RC振荡器 ?多种显示方式 若选16 SEG & 8 COM显示方式,显示RAM为16×8-bit。 若选20 SEG & 4 COM显示方式,显示RAM为10×8-bit。 ?两线I2C通信接口(HT16K23工作在从机方式,MCU工作在主机方式) ?按键扫描功能 若选16 SEG & 8 COM显示方式,最多提供16×1按键扫描。 若选20 SEG & 4 COM显示方式,最多提供20×1按键扫描。 ?LCD Bias Circuit:可设定为1/3 bias、1/4 duty或1/4 bias、1/8 duty ?可选硬件中断功能

表1和表2分别为20 SEG & 4 COM 的RAM Mapping 和16 SEG&8COM 的RAM Mapping : ? HT16K23 RAM 内部有个地址指针,当往某个地址写入或读取数据后,地址指针自动加1,指向下一个要写入或读取的地址 ? 如表1所示,在20 SEG×4 COM 显示方式下,内存地址达到0x0AH 后,再次写入或读取数据时,地址将自动复位为00H ? 如表2所示,在16 SEG×8 COM 显示方式下,内存地址达到0x0FH 后,再次写入或读取数据时,地址将自动复位为00H ? 用户可以根据自己的需要,在RAM 内写入或读取相应的数据 其他: ? 若选16 SEG & 8 COM 显示方式,LCD bias Circuit 设定为1/4 bias 、1/8 duty ,最多可选16个按键 ? 若选20 SEG & 4 COM 显示方式,LCD bias Circuit 设定为1/3 bias 、1/4 duty ,最多可选20个按键 ? SEG 脚与按键输入脚共用,按键RAM 地址为0x20~0x22,为只读寄存器,如表3所示 表3:按键按键寄存器寄存器 操作操作说明说明 主控MCU 通过I 2C 通信方式实现对HT16K23进行配置及数据传输 (传输方式为MSB 方式即高位先传)。 HT16K23写入操作 写入命令 图2 写入命令控制时序 主机给HT16K23发送一个START 命令,紧接着发高7位从机地址 (E6H 即HT16K23的地址),其中第八位设定为0 (写入命令),此后,HT16K23将应答一个ACK 信号 (ACK 为"1"表示数据传输成功,否则为失败,用户可根据此位做相应的处理),主机接收到ACK 信号后,继续发送8-bit 的控制命令码 (命令码在下文会介绍),HT16K23又一次应答ACK 信号,主机接收到ACK 信号后,发送STOP 命令,写入命令操作结束。

holtek单片机图文全面详解

holtek单片机图文全面详解 电子产品项目中对单片机的选型,可谓仁者见仁智者见智。合泰单片机价格适中,种类也比较齐全。下面就为大家全面介绍下holtek的单片机。 holtek单片机是由盛群半导体设计开发,盛群半导体为国内专业微控制器IC设计领导厂商,营业范围主要包括微控制器IC及其周边组件之设计、研发与销售。自1998年成立以来,公司不断致力于新产品的研发及技术的创新,加上对市场趋势的掌握,期能提供广大电子市场最具竞争力之IC产品。产品范围包括:泛用型与专用型微控制器(MCU),除一般应用领域外,更涵盖语音、通讯、计算机外设、家电、医疗、车用及安全监控等各专业领域,并提供各种电源管理及非易失性内存等微控制器外围组件,提供客户更具竞争能力的完整解决方案。 holtek单片机分类(1)HT48系列I/O 型(+ LCD) (2)HT49系列I/O + LCD 型 (3)HT46系列I/O+AD 型(+ LCD) (4)HT47系列I/O+RC-F(AD)+LCD+IR型 (5)HT48xAx\HT49xAx系列Remote (遙控器用)型 (6)HT95R2x\HT95R3x系列Phone(+ LCD) (7)HT45R3x\BS28xx\BS26xx系列Touch型 (8)Flash 型(HT46Fxx\HT48Fxx\HT66Fxx\HT68Fxx) (9)TIny Power 型(HT56R2x,HT56R6x,HT56R6xx ) (10)Keyboard/Mouse系列,USB Audio系列, V oice/Music系列,VFD系列。。 HOLTEK单片机系统结构 Holtek单片机的系统结构 时序和流水线结构

合泰单片机智能充电器定时程序HT46R47_timer

#include "HT46R47-H.h" extern unsigned char Tcount; extern unsigned char SecondCnt; extern unsigned int ChargingTimeValue; // extern bit StartTimeFlg; extern bit ChargingT_OverFlg; extern bit Start_5S; extern bit Flg_5S; extern unsigned char Cnt5s; //timer isr #pragma vector ISR_Timer @ 0x08 void ISR_Timer(void) //8ms { Tcount++; if(Tcount>=13) //104ms { Tcount = 0; SecondCnt++; if(SecondCnt>=10) //1s { SecondCnt = 0; //--------------------------timer if(ChargingTimeValue!=0) { if(StartTimeFlg==1) { ChargingTimeValue--; if(ChargingTimeValue==0) { ChargingT_OverFlg = 1; } } } //---------------------------5s /* if(Start_5S==1) { Cnt5s++; if(Cnt5s>=5) { Cnt5s = 0;

Start_5S = 0; Flg_5S = 1; } } */ } } }

合泰单片机HT66F018红外发射C程序及电路图

#include "HT66F018.h" #include "ExternRAM.h" void SendIRdata(char p_irdata) { unsigned char iraddr1; //十六位地址的第一个字节 unsigned char iraddr2; //十六位地址的第二个字节 int i; char irdata,count; irdata=p_irdata; iraddr1=0x00; iraddr2=0xbf; //发送9ms的起始码 endcount=16;//223 _t1on=1; _t2on=1; do{}while(0

_pa7=1; do{}while(count>1; } //发送十六位地址的后八位 irdata=iraddr2; for(i=0;i<8;i++) { //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)endcount=1; _t1on=1; do{}while(0>1; } //发送八位数据 irdata=p_irdata; for(i=0;i<8;i++) { //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)endcount=1; _t1on=1; do{}while(0

合泰单片机外部中断程序

合泰单片机外部中断程序 ;;内容:按下PA3 接的按键进中断LED 灯左移一位;LED 接法PD 口;源码 下载:51hei/f/htwzd.rar;1.开中断;2.中断中防抖include HT66F50.incORG0000HJMPA1ORG04H;外部中断0 入口地址 JMPZD01;ORG30H;A1:MOVA,00000000B;MOVPRM1,A;设置外部中断0 的管 脚为PA.3MOVA,00000010B;MOVINTEG,A;设置外部中断0 为下降沿触发CLRACERL;设置PA 口不为AD 输入口SETPAPU.3;设置PA.3 上拉SETPAC.3; 设置PA.3 为输入口MOVA,08H;MOVCP0C,A;设置PA3 不为比较器输入口CLRPDC;设置PD 口为输出口MOVA,01H;设置PD 口初始状态MOVPD,A;PD 口显示初始状态CLRINT0F;清中断0 标志SETINT0E;使能外部0 中断SETEMI; 使能总中断 JMP$;*************************************************;外部中断0 服 务子程序;*************************************************ZD01:RLPD; 左移PD 口显示SNZPA.3;判断PA3 是否为高电平(去抖)JMP$-1;是低电平则返回判断CALLM001;延时防止抖动SNZPA.3;JMP$-4;CLRINT0F;清中断标志RETI;中断返回;**************************************;延时子程序; **************************************M001:MOVA,1MOV[85H],AM002: MOVA,10MOV[86H],AM003:MOVA,250MOV[87H],AM004:SDZ[87H]JMPM004 SDZ[86H]JMPM003SDZ[85H]JMPM002 RETEND tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

相关主题
相关文档
最新文档