STM8 的 C 语言编程 (1)-- 基本程序与启动代码分析 现在几乎所有的单片机都能用 C 语言编程了, 采用 C 语言编程确实能带来很多好处, 至少可读性比汇编语言强多了 在 STM8 的开发环境中, 可以通过新建一个工程, 自动地建立起一个 C 语言的框架, 生成后开发环境会自动生成 2 个

Size: px
Start display at page:

Download "STM8 的 C 语言编程 (1)-- 基本程序与启动代码分析 现在几乎所有的单片机都能用 C 语言编程了, 采用 C 语言编程确实能带来很多好处, 至少可读性比汇编语言强多了 在 STM8 的开发环境中, 可以通过新建一个工程, 自动地建立起一个 C 语言的框架, 生成后开发环境会自动生成 2 个"

Transcription

1 STM8 C 语言编程与模块使用范例 目录 STM8 的 C 语言编程 (1)-- 基本程序与启动代码分析 STM8 的 C 语言编程 (2)-- 变量空间的分配 STM8 的 C 语言编程 (3) GPIO 输出 STM8 的 C 语言编程 (4) GPIO 输出和输入 STM8 的 C 语言编程 (5)--8 位定时器应用之一 STM8 的 C 语言编程 (6)--8 位定时器应用之二 STM8 的 C 语言编程 (7)--16 位定时器的中断应用 STM8 的 C 语言编程 (8)-- UART 应用 STM8 与汇编语言 (9)--EEPROM 应用 STM8 的 C 语言编程 (10)-- 修改 CPU 的时钟 STM8 的 C 语言编程 (11)-- 切换时钟源 STM8 的 C 语言编程 (12)-- AD 转换 STM8 的 C 语言编程 (13)-- 蜂鸣器 STM8 的 C 语言编程 (14)-- PWM

2 STM8 的 C 语言编程 (1)-- 基本程序与启动代码分析 现在几乎所有的单片机都能用 C 语言编程了, 采用 C 语言编程确实能带来很多好处, 至少可读性比汇编语言强多了 在 STM8 的开发环境中, 可以通过新建一个工程, 自动地建立起一个 C 语言的框架, 生成后开发环境会自动生成 2 个 C 语言的程序, 一个是 main.c, 另一个是 stm8_interrupt_vector.c main.c 中就是一个空的 main() 函数, 如下所示 : main() while (1); 而在 stm8_interrupt_vector.c 中, 就是声明了对应该芯片的中断向量, 如下所示 : /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ typedef (*interrupt_handler_t)(void); struct interrupt_vector unsigned char interrupt_instruction; interrupt_handler_t void NonHandledInterrupt (void) /* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction */ return; extern void _stext(); /* startup routine */ struct interrupt_vector const _vectab[] = 0x82, (interrupt_handler_t)_stext, /* reset */ 0x82, NonHandledInterrupt, /* trap */ 0x82, NonHandledInterrupt, /* irq0 */

3 0x82, NonHandledInterrupt, /* irq1 */ 0x82, NonHandledInterrupt, /* irq2 */ 0x82, NonHandledInterrupt, /* irq3 */ 0x82, NonHandledInterrupt, /* irq4 */ 0x82, NonHandledInterrupt, /* irq5 */ 0x82, NonHandledInterrupt, /* irq6 */ 0x82, NonHandledInterrupt, /* irq7 */ 0x82, NonHandledInterrupt, /* irq8 */ 0x82, NonHandledInterrupt, /* irq9 */ 0x82, NonHandledInterrupt, /* irq10 */ 0x82, NonHandledInterrupt, /* irq11 */ 0x82, NonHandledInterrupt, /* irq12 */ 0x82, NonHandledInterrupt, /* irq13 */ 0x82, NonHandledInterrupt, /* irq14 */ 0x82, NonHandledInterrupt, /* irq15 */ 0x82, NonHandledInterrupt, /* irq16 */ 0x82, NonHandledInterrupt, /* irq17 */ 0x82, NonHandledInterrupt, /* irq18 */ 0x82, NonHandledInterrupt, /* irq19 */ 0x82, NonHandledInterrupt, /* irq20 */ 0x82, NonHandledInterrupt, /* irq21 */ 0x82, NonHandledInterrupt, /* irq22 */ 0x82, NonHandledInterrupt, /* irq23 */ 0x82, NonHandledInterrupt, /* irq24 */ 0x82, NonHandledInterrupt, /* irq25 */ 0x82, NonHandledInterrupt, /* irq26 */ 0x82, NonHandledInterrupt, /* irq27 */ 0x82, NonHandledInterrupt, /* irq28 */ 0x82, NonHandledInterrupt, /* irq29 */ ; 在 stm8_interrupt_vector.c 中, 除了定义了中断向量表外, 还定义了空的中断服务程序, 用于那些不用的中断 当然在自动建立时, 所有的中断服务都是空的, 因此, 除了第 1 个复位的向量外, 其它都指向那个空的中断服务函数 生成框架后, 就可以用 Build 菜单下的 Rebuild All 对项目进行编译和连接, 生成所需的目标文件, 然后就可以加载到 STM8 的芯片中, 这里由于 main() 函数是一个空函数, 因此没有任何实际的功能 不过我们可以把这个框架对应的汇编代码反出来, 看看 C 语言生成的代码, 这样可以更深入地了解 C 语言编程的特点 生成的代码包括 4 个部分, 如图 1 图 2 图 3 图 4 所示

4 图 1 图 2

5 图 3 图 4 图 1 显示的是从内存地址 8000H 开始的中断向量表, 中断向量表中的第 1 行 H 为复位后 单片机运行的第 1 跳指令的地址 从表中可以看出, 单片机复位后, 将从 8083H 开始运行 其它行的 中断向量都指向同一个位置的中断服务程序 80D0H 图 2 显示的是 3 个字节, 前 2 个字节 8083H 为复位后的第 1 条指令的地址, 第 3 个字节是一个常量 0, 后面的启动代码要用到 图 3 显示的是启动代码, 启动代码中除了初始化堆栈指针外, 就是初始化 RAM 单元 由于目前是一个空的框架, 因此在初始化完堆栈指针 ( 设置成 0FFFH) 后, 由于 8082H 单元的内容为 0, 因此程序就跳到了 80B1H, 此处是一个循环, 将 RAM 单元从 0 到 5 初始化成 0 然后由于寄存器 X 设置成 01 00H, 就直接通过 CALL main 进入 C 的 main() 函数 图 4 显示的是 main() 函数和中断服务函数,main() 函数对应的代码就是一个无限的循环, 而中断服务 函数就一条指令, 即中断返回指令

6 通过分析, 可以看出用 C 语言编程时, 比汇编语言编程时, 就是多出了一段启动代码 STM8 的 C 语言编程 (2)-- 变量空间的分配 采用 C 这样的高级语言, 其实可以不用关心变量在存储器空间中是如何具体分配的 但如果了解如何分配, 对编程还是有好处的, 尤其是在调试时 例如下面的程序定义了全局变量数组 buffer 和一个局部变量 i, 在 RAM 中如何分配的呢? /* MAIN.C file * * Copyright (c) STMicroelectronics */ unsigned char buffer[10]; // 定义全局变量 main() unsigned char i; // 定义局部变量 for(i=0;i<10;i++) buffer[i] = 0x55; 我们可以通过 DEBUG 中的反汇编窗口, 看到如下的对应代码 : 从这段代码中可以看到, 全局变量 buffer 被分配到空间从地址 0000H 到 0009H 而局部变量 i 则在堆栈空间中分配, 通过 PUSH A 指令, 将堆栈指针减 1, 腾出一个字节的空间, 而 SP+1 指向的空间就是分配给局部变量使用的空间 由此可以得出初步的结论, 对于全局变量, 内存分配是从低地址 0000H 开始向上分配的 而局部变量则是在堆栈空间中分配

7 另外从上一篇文章中, 可以知道堆栈指针初始化时为 0FFFH 而根据 PUSH 指令的定义, 当压栈后堆栈指针减 1 因此堆栈是从上往下使用的 因此根据内存分配和堆栈使用规则, 我们在程序设计时, 不能定义过多的变量, 免得没有空间给堆栈使用 换句话说, 当定义变量时, 一定要考虑到堆栈空间, 尤其是那些复杂的系统, 程序调用层数多, 这样就会占用大量的堆栈空间 总之, 在单片机的程序设计时, 由于 RAM 空间非常有限, 要充分考虑到全局变量 局部变量 程序调用层数和中断服务调用对空间的占用 STM8 的 C 语言编程 (3) GPIO 输出 与前些日子写的用汇编语言进行的实验一样, 从今天开始, 要在 ST 的三合一开发板上, 用 C 语言编写程序, 进行一系列的实验 首先当然从最简单的 LED 指示灯闪烁的实验开始 开发板上的 LED1 接在 STM8 的 PD3 上, 因此要将 PD3 设置成输出模式, 为了提高高电平时的输出电流, 要将其设置成推挽输出方式 这主要通过设置对应的 DDR/CR1/CR2 寄存器实现 利用 ST 的开发工具, 先生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 编译通过后, 下载到开发板, 运行程序, 可以看到 LED1 在闪烁, 且闪烁的频率为 5HZ /* MAIN.C file * Copyright (c) STMicroelectronics */ #include "STM8S207C_S.h" // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i; while(ms!= 0) for(i=0;i<250;i++) for(i=0;i<75;i++)

8 ms--; // 函数功能 : 主函数 // 初始化 GPIO 端口 PD3, 驱动 PD3 为高电平和低电平 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 main() PD_DDR = 0x08; PD_CR1 = 0x08; // 将 PD3 设置成推挽输出 PD_CR2 = 0x00; while(1) PD_ODR = PD_ODR 0x08; // 将 PD3 的输出设置成 1 DelayMS(100); // 延时 100MS PD_ODR = PD_ODR & 0xF7; // 将 PD3 的输出设置成 0 DelayMS(100); // 延时 100MS 需要注意的是, 当生成完框架后, 为了能方便使用 STM8 的寄存器名字, 必须包括 STM8S207C_S. h, 最好将该文件拷贝到 C:\Program Files\STMicroelectronics\st_toolset\include 目录下, 拷贝到工程目录下 或者将该路径填写到该工程的 Settings 中的 C Compiler 选项 Preprocessor 的 Additional i nclude 中, 这样编译时才会找到该文件 STM8 的 C 语言编程 (4) GPIO 输出和输入 今天要进行的实验, 是利用 GPIO 进行输入和输出 在 ST 的三合一开发板上, 按键接在 GPIO 的 PD 7 上,LED 接在 GPIO 的 PD3 上, 因此我们要将 GPIO 的 PD7 初始化成输入,PD3 初始化成输出 关于 GPIO 的引脚设置, 主要是要初始化方向寄存器 DDR, 控制寄存器 1(CR1) 和控制寄存器 2(C R2), 寄存器的每一位对应 GPIO 的每一个引脚 具体的设置功能定义如下 : DDR CR1 CR2 引脚设置 悬浮输入

9 0 0 1 上拉输入 中断悬浮输入 中断上拉输入 开漏输出 推挽输出 1 X 1 输出 ( 最快速度为 10MHZ) 另外, 输出引脚对应的寄存器为 ODR, 输入引脚对应的寄存器为 IDR 下面的程序是检测按键的状态, 当按键按下时, 点亮 LED, 当按键抬起时, 熄灭 LED 同样也是利用 ST 的开发工具, 先生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代 码如下 编译通过后, 下载到开发板, 运行程序, 按下按键,LED 就点亮, 抬起按键,LED 就熄灭了 另外, 要注意, 将 STM8S207C_S.h 拷贝到当前项目的目录下 // 程序描述 : 检测开发板上的按键, 若按下, 则点亮 LED, 若抬起, 则熄灭 LED // 按键接在 MCU 的 GPIO 的 PD7 上 // LED 接在 MCU 的 GPIO 的 PD3 上 #include "STM8S207C_S.h" main() PD_DDR = 0x08; PD_CR1 = 0x08; // 将 PD3 设置成推挽输出 PD_CR2 = 0x00; while(1) // 进入无限循环 if((pd_idr & 0x80) == 0x80) // 读入 PD7 的引脚信号 PD_ODR = PD_ODR & 0xF7; // 如果 PD7 为 1, 则将 PD3 的输出设置成 0, 熄灭 LED else PD_ODR = PD_ODR 0x08; // 否则, 将 PD3 的输出设置成 1, 点亮 LED

10 STM8 的 C 语言编程 (5)--8 位定时器应用之一 在 STM8 单片机中, 有多种定时器资源, 既有 8 位的定时器, 也有普通的 16 位定时器, 还有高级的定时器 今天的实验是用最简单的 8 位定时器 TIM4 来进行延时, 然后驱动 LED 闪烁 为了简单起见, 这里是通过程序查询定时器是否产生更新事件, 来判断定时器的延时是否结束 同样还是利用 ST 的开发工具, 生成一个 C 程序的框架, 然后修改其中的 main.c, 修改后的代码如下 编译通过后, 下载到开发板, 运行程序, 可以看到 LED 在闪烁, 或者用示波器可以在 LED 引脚上看到方波 在这里要特别提醒的是, 从 ST 给的手册上看, 这个定时器中的计数器是一个加 1 计数器, 但本人在实验过程中感觉不太对, 经过反复的实验, 我认为应该是一个减 1 计数器 ( 也许是我拿的手册不对, 或许是理解上有误 ) 例如, 当给定时器中的自动装载寄存器装入 255 时, 产生的方波频率最小, 就象下面代码中计算的那样, 产生的方波频率为 30HZ 左右 若初始化时给自动装载寄存器装入 1, 则产生的方波频率最大, 大约为 3.9K 左右 也就是说实际的分频数为 ARR 寄存器的值 +1 // 程序描述 : 通过初始化定时器 4, 进行延时, 驱动 LED 闪烁 // LED 接在 MCU 的 GPIO 的 PD3 上 #include "STM8S207C_S.h" main() // 首先初始化 GPIO PD_DDR = 0x08; PD_CR1 = 0x08; // 将 PD3 设置成推挽输出 PD_CR2 = 0x00; // 然后初始化定时器 4 TIM4_IER = 0x00; TIM4_EGR = 0x01; TIM4_PSCR = 0x07; TIM4_ARR = 255; TIM4_CNTR = 255; TIM4_CR1 = 0x01; // 禁止中断 // 允许产生更新事件 // 计数器时钟 = 主时钟 /128=2MHZ/128 // 相当于计数器周期为 64uS // 设定重装载时的寄存器值,255 是最大值 // 设定计数器的初值 // 定时周期 =(ARR+1)*64=16320uS // b0 = 1, 允许计数器工作 // b1 = 0, 允许更新 // 设置控制器, 启动定时器 while(1) // 进入无限循环

11 while((tim4_sr1 & 0x81) == 0x00); // 等待更新标志 TIM4_SR1 = 0x00; // 清除更新标志 PD_ODR = PD_ODR ^ 0x08; // LED 驱动信号取反 // LED 闪烁频率 =2MHZ/128/255/2=30.63 STM8 的 C 语言编程 (6)--8 位定时器应用之二 今天进行的实验依然是用定时器 4, 只不过改成了用中断方式来实现, 由定时器 4 的中断服务程序来驱动 LED 的闪烁 实现中断方式的关键点有几个, 第一个关键点就是要打开定时器 4 的中断允许位, 在定时器 4 的 IER 寄存器中有定义 第二个关键点, 就是打开 CPU 的全局中断允许位, 在汇编语言中, 就是执行 RIM 指令, 在 C 语言中, 用下列语句实现 : _asm("rim"); 第 3 个关键点就是中断服务程序的框架或写法, void TIM4_UPD_OVF_IRQHandler (void) // 下面是中断服务程序的实体 第 4 个关键点就是要设置中断向量, 即将中断服务程序的入口填写到中断向量表中, 如下所示, 将 IR Q23 对应的中断服务程序的入口填写成 TIM4_UPD_OVF_IRQHandler struct interrupt_vector const _vectab[] = 0x82, (interrupt_handler_t)_stext, /* reset */ 0x82, NonHandledInterrupt, /* trap */ 0x82, NonHandledInterrupt, /* irq0 */ 0x82, NonHandledInterrupt, /* irq1 */ 0x82, NonHandledInterrupt, /* irq2 */ 0x82, NonHandledInterrupt, /* irq3 */ 0x82, NonHandledInterrupt, /* irq4 */ 0x82, NonHandledInterrupt, /* irq5 */ 0x82, NonHandledInterrupt, /* irq6 */ 0x82, NonHandledInterrupt, /* irq7 */ 0x82, NonHandledInterrupt, /* irq8 */ 0x82, NonHandledInterrupt, /* irq9 */ 0x82, NonHandledInterrupt, /* irq10 */ 0x82, NonHandledInterrupt, /* irq11 */

12 0x82, NonHandledInterrupt, /* irq12 */ 0x82, NonHandledInterrupt, /* irq13 */ 0x82, NonHandledInterrupt, /* irq14 */ 0x82, NonHandledInterrupt, /* irq15 */ 0x82, NonHandledInterrupt, /* irq16 */ 0x82, NonHandledInterrupt, /* irq17 */ 0x82, NonHandledInterrupt, /* irq18 */ 0x82, NonHandledInterrupt, /* irq19 */ 0x82, NonHandledInterrupt, /* irq20 */ 0x82, NonHandledInterrupt, /* irq21 */ 0x82, NonHandledInterrupt, /* irq22 */ 0x82, TIM4_UPD_OVF_IRQHandler,/* irq23 */ 0x82, NonHandledInterrupt, /* irq24 */ 0x82, NonHandledInterrupt, /* irq25 */ 0x82, NonHandledInterrupt, /* irq26 */ 0x82, NonHandledInterrupt, /* irq27 */ 0x82, NonHandledInterrupt, /* irq28 */ 0x82, NonHandledInterrupt, /* irq29 */ ; 解决了以上 4 个关键点, 我们就能很轻松地用 C 语言实现中断服务了 同样还是利用 ST 的开发工具, 生成一个 C 程序的框架, 然后修改其中的 main.c, 修改后的代码如下 另外还要修改 stm8_interrupt_vector.c 编译通过后, 下载到开发板, 运行程序, 可以看到 LED 在闪烁, 或者用示波器可以在 LED 引脚上看到方波 修改后的 main.c 如下 : // 程序描述 : 通过初始化定时器 4, 以中断方式驱动 LED 闪烁 // LED 接在 MCU 的 GPIO 的 PD3 上 #include "STM8S207C_S.h" main() // 首先初始化 GPIO PD_DDR = 0x08; PD_CR1 = 0x08; // 将 PD3 设置成推挽输出 PD_CR2 = 0x00; // 然后初始化定时器 4 TIM4_IER = 0x00; // 禁止中断

13 TIM4_EGR = 0x01; TIM4_PSCR = 0x07; TIM4_ARR = 255; TIM4_CNTR = 255; TIM4_CR1 = 0x01; TIM4_IER = 0x01; _asm("rim"); // 允许产生更新事件 // 计数器时钟 = 主时钟 /128=2MHZ/128 // 相当于计数器周期为 64uS // 设定重装载时的寄存器值,255 是最大值 // 设定计数器的初值 // 定时周期 =(ARR+1)*64=16320uS // b0 = 1, 允许计数器工作 // b1 = 0, 允许更新 // 设置控制器, 启动定时器 // 允许更新中断 // 允许 CPU 全局中断 while(1) // 进入无限循环 // 函数功能 : 定时器 4 的更新中断服务程序 // 输入参数 : 无 // 输出参数 : 无 // 返回值 void TIM4_UPD_OVF_IRQHandler (void) TIM4_SR1 = 0x00; // 清除更新标志 PD_ODR = PD_ODR ^ 0x08; // LED 驱动信号取反 //LED 闪烁频率 =2MHZ/128/255/2=30.63 修改后的 stm8_interrupt_vector.c 如下 : /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ typedef (*interrupt_handler_t)(void); struct interrupt_vector unsigned char interrupt_instruction; interrupt_handler_t interrupt_handler; ;

14 void NonHandledInterrupt (void) /* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction */ return; extern void _stext(); /* startup routine void TIM4_UPD_OVF_IRQHandler (void); struct interrupt_vector const _vectab[] = 0x82, (interrupt_handler_t)_stext, /* reset */ 0x82, NonHandledInterrupt, /* trap */ 0x82, NonHandledInterrupt, /* irq0 */ 0x82, NonHandledInterrupt, /* irq1 */ 0x82, NonHandledInterrupt, /* irq2 */ 0x82, NonHandledInterrupt, /* irq3 */ 0x82, NonHandledInterrupt, /* irq4 */ 0x82, NonHandledInterrupt, /* irq5 */ 0x82, NonHandledInterrupt, /* irq6 */ 0x82, NonHandledInterrupt, /* irq7 */ 0x82, NonHandledInterrupt, /* irq8 */ 0x82, NonHandledInterrupt, /* irq9 */ 0x82, NonHandledInterrupt, /* irq10 */ 0x82, NonHandledInterrupt, /* irq11 */ 0x82, NonHandledInterrupt, /* irq12 */ 0x82, NonHandledInterrupt, /* irq13 */ 0x82, NonHandledInterrupt, /* irq14 */ 0x82, NonHandledInterrupt, /* irq15 */ 0x82, NonHandledInterrupt, /* irq16 */ 0x82, NonHandledInterrupt, /* irq17 */ 0x82, NonHandledInterrupt, /* irq18 */ 0x82, NonHandledInterrupt, /* irq19 */ 0x82, NonHandledInterrupt, /* irq20 */ 0x82, NonHandledInterrupt, /* irq21 */ 0x82, NonHandledInterrupt, /* irq22 */

15 ; 0x82, TIM4_UPD_OVF_IRQHandler,/* irq23 */ 0x82, NonHandledInterrupt, /* irq24 */ 0x82, NonHandledInterrupt, /* irq25 */ 0x82, NonHandledInterrupt, /* irq26 */ 0x82, NonHandledInterrupt, /* irq27 */ 0x82, NonHandledInterrupt, /* irq28 */ 0x82, NonHandledInterrupt, /* irq29 */ STM8 的 C 语言编程 (7)--16 位定时器的中断应用 在 STM8 中, 除了有 8 位的定时器外, 还有 16 位的定时器 今天进行的实验就是针对 16 位定时器 2 来进行的 除了计数单元为 16 位的, 其它设置与前面 8 位的定时器基本一样 下面的程序也是采样中断方式, 由定时器 2 的中断服务程序来驱动 LED 的闪烁 具体的程序代码如下, 其它注意点见上一篇, 另外要注意别忘了修改相应的中断向量 // 程序描述 : 通过初始化定时器 2, 以中断方式驱动 LED 闪烁 // LED 接在 MCU 的 GPIO 的 PD3 上 #include "STM8S207C_S.h" main() // 首先初始化 GPIO PD_DDR = 0x08; PD_CR1 = 0x08; // 将 PD3 设置成推挽输出 PD_CR2 = 0x00; // 然后初始化定时器 4 TIM2_IER = 0x00; TIM2_EGR = 0x01; TIM2_PSCR = 0x01; TIM2_ARRH = 0xEA; TIM2_ARRL = 0x60; // 禁止中断 // 允许产生更新事件 // 计数器时钟 = 主时钟 /128=2MHZ/2 // 相当于计数器周期为 1uS // 设定重装载时的寄存器值 // 注意必须保证先写入高 8 位, 再写入低 8 位 // 设定重装载时的寄存器的高 8 位 TIM2_CNTRH = 0xEA; // 设定计数器的初值

16 TIM2_CNTRL = 0x60; TIM2_CR1 = 0x01; TIM2_IER = 0x01; _asm("rim"); // 定时周期 =1*60000=60000uS=60ms // b0 = 1, 允许计数器工作 // b1 = 0, 允许更新 // 设置控制器, 启动定时器 // 允许更新中断 // 允许 CPU 全局中断 while(1) // 进入无限循环 // 函数功能 : 定时器 4 的更新中断服务程序 // 输入参数 : 无 // 输出参数 : 无 // 返回值 void TIM2_UPD_IRQHandler (void) TIM2_SR1 = 0x00; // 清除更新标志 PD_ODR = PD_ODR ^ 0x08; // LED 驱动信号取反 //LED 闪烁频率 =2MHZ/2/60000/2=8.3 STM8 的 C 语言编程 (8)-- UART 应用 串口通讯也是单片机应用中经常要用到, 今天的实验就是利用 STM8 的 UART 资源, 来进行串口通讯的实验 实验程序的功能是以中断方式接收串口数据, 然后将接收到的数据以查询方式发送到串口 程序代码如下, 首先要对 STM8 的 UART 进行初始化, 初始化时要注意的是波特率寄存器的设置, 当求出一个波特率的分频系数 ( 一个 16 位的数 ) 后, 要将高 4 位和低 4 位写到 BRR2 中, 而将中间的 8 位写到 BR R1 中, 并且必须是先写 BRR2, 再写 BRR1 同样也是利用 ST 的开发工具, 生成一个 C 语言的框架, 然后修改其中的 main.c, 同时由于需要用到中断服务, 因此还要修改 stm8_interrupt_vector.c 修改后, 编译连接, 然后下载到开发板上, 再做一根与 PC 机相连的线, 把开发板的串口与 PC 机的串口连接起来, 注意,2 3 脚要交叉 在 PC 机上运行超级终端, 设置波特率为 9600, 然后每按下一个按键, 屏幕上就显示对应的字符 修改后的 main.c 和 stm8_interrupt_vector.c 如下 : // 程序描述 : 初始化 UART, 以中断方式接收字符, 以查询方式发送

17 // UART 通讯参数 :9600bps,8 位数据,1 位停止位, 无校验 #include "STM8S207C_S.h" // 函数功能 : 初始化 UART // 输入参数 : 无 // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void UART3_Init(void) LINUART_CR2 = 0; // 禁止 UART 发送和接收 LINUART_CR1 = 0; // b5 = 0, 允许 UART // b2 = 0, 禁止校验 LINUART_CR3 = 0; // b5,b4 = 00,1 个停止位 // 设置波特率, 必须注意以下几点 : // (1) 必须先写 BRR2 // (2) BRR1 存放的是分频系数的第 11 位到第 4 位, // (3) BRR2 存放的是分频系数的第 15 位到第 12 位, 和第 3 位到第 0 位 // 例如对于波特率位 9600 时, 分频系数 = /9600=208 // 对应的十六进制数为 00D0,BBR1=0D,BBR2=00 LINUART_BRR2 = 0; LINUART_BRR1 = 0x0d; // 实际的波特率分频系数为 00D0(208) // 对应的波特率为 /208=9600 LINUART_CR2 = 0x2C; // b3 = 1, 允许发送 // b2 = 1, 允许接收 // b5 = 1, 允许产生接收中断 // 函数功能 : 从 UART3 发送一个字符 // 输入参数 :ch -- 要发送的字符 // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void UART3_SendChar(unsigned char ch)

18 while((linuart_sr & 0x80) == 0x00); // 若发送寄存器不空, 则等待 LINUART_DR = ch; // 将要发送的字符送到数据寄存器 main() // 首先初始化 UART3 UART3_Init(); _asm("rim"); // 允许 CPU 全局中断 while(1) // 进入无限循环 // 函数功能 :UART3 的接收中断服务程序 // 输入参数 : 无 // 输出参数 : 无 // 返回值 void UART3_Recv_IRQHandler (void) unsigned char ch; ch = LINUART_DR; UART3_SendChar(ch); // 读入接收到的字符 // 将字符发送出去 /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ typedef (*interrupt_handler_t)(void); struct interrupt_vector unsigned char interrupt_instruction; interrupt_handler_t interrupt_handler;

19 ; void NonHandledInterrupt (void) /* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction */ return; extern void _stext(); /* startup routine void UART3_Recv_IRQHandler(); struct interrupt_vector const _vectab[] = 0x82, (interrupt_handler_t)_stext, /* reset */ 0x82, NonHandledInterrupt, /* trap */ 0x82, NonHandledInterrupt, /* irq0 */ 0x82, NonHandledInterrupt, /* irq1 */ 0x82, NonHandledInterrupt, /* irq2 */ 0x82, NonHandledInterrupt, /* irq3 */ 0x82, NonHandledInterrupt, /* irq4 */ 0x82, NonHandledInterrupt, /* irq5 */ 0x82, NonHandledInterrupt, /* irq6 */ 0x82, NonHandledInterrupt, /* irq7 */ 0x82, NonHandledInterrupt, /* irq8 */ 0x82, NonHandledInterrupt, /* irq9 */ 0x82, NonHandledInterrupt, /* irq10 */ 0x82, NonHandledInterrupt, /* irq11 */ 0x82, NonHandledInterrupt, /* irq12 */ 0x82, NonHandledInterrupt, /* irq13 */ 0x82, NonHandledInterrupt, /* irq14 */ 0x82, NonHandledInterrupt, /* irq15 */ 0x82, NonHandledInterrupt, /* irq16 */ 0x82, NonHandledInterrupt, /* irq17 */ 0x82, NonHandledInterrupt, /* irq18 */ 0x82, NonHandledInterrupt, /* irq19 */ 0x82, NonHandledInterrupt, /* irq20 */ 0x82, UART3_Recv_IRQHandler, /* irq21 */

20 ; 0x82, NonHandledInterrupt, /* irq22 */ 0x82, NonHandledInterrupt, /* irq23 */ 0x82, NonHandledInterrupt, /* irq24 */ 0x82, NonHandledInterrupt, /* irq25 */ 0x82, NonHandledInterrupt, /* irq26 */ 0x82, NonHandledInterrupt, /* irq27 */ 0x82, NonHandledInterrupt, /* irq28 */ 0x82, NonHandledInterrupt, /* irq29 */ STM8 与汇编语言 (9)--EEPROM 应用 EEPROM 是单片机应用系统中经常会用到的存储器, 它主要用来保存一些掉电后需要保持不变的数据 在以前的单片机系统中, 通常都是在单片机外面再扩充一个 EEPROM 芯片, 这种方法除了增加成本外, 也降低了可靠性 现在, 很多单片机的公司都推出了集成有小容量 EEPROM 的单片机, 这样就方便了使用, 降低了成本, 提高了可靠性 STM8 单片机芯片内部也集成有 EEPROM, 容量从 640 字节到 2K 字节 最为特色的是, 在 STM8 单片机中, 对 EEPROM 的访问就象常规的 RAM 一样, 非常方便 EEPROM 的地址空间与内存是统一编址的, 地址从 H 开始, 大小根据不同的芯片型号而定 下面的实验程序, 就是先给 EEPROM 中的第一个单元 H 写入 55H, 然后再读到全局变量 ch 中 同样还是利用 ST 的开发工具, 生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 // 程序描述 : 对芯片内部的 EEPROM 存储单元进行实验 #include "STM8S207C_S.h" unsigned char ch; main() unsigned char *p; p = (unsigned char *)0x4000; // 指针 p 指向芯片内部的 EEPROM 第一个单元 // 对数据 EEPROM 进行解锁 do FLASH_DUKR = 0xae; // 写入第一个密钥 FLASH_DUKR = 0x56; // 写入第二个密钥 while((flash_iapsr & 0x08) == 0); // 若解锁未成功, 则重新再来

21 *p = 0xaa; // 写入第一个字节 while((flash_iapsr & 0x04) == 0); // 等待写操作成功 ch = *p; // 将写入的内容读到变量 ch 中 while(1) ; 这里要注意的是,2 个密钥的顺序, 与 STM8 的用户手册上是相反的, 如果按照手册上的顺序, 就会停留在 do while 循环中 具体原因, 也不是很清楚, 也可能是我拿到的手册 ( 中文和英文的都一样 ) 太旧了, 或者是理解有误 另外, 上面的实验程序中,ch 不能为局部变量, 否则的话, 在调试环境中跟踪 ch 变量时, 显示的结果就不对, 通过反汇编, 我觉得是编译有问题, 当定义成局部变量时,ch = *p 的汇编代码如下 : main.c:23 ch = *p; // 将写入的内容读到变量 ch 中 0x80f0 <main+34> 0x7B01 LD A,(0x01,SP) LD A,(0x01,SP) 0x80f2 <main+36> 0x97 LD XL,A LD XL,A 0x80f3 <main+37> 0x1E02 LDW X,(0x02,SP) LDW X,(0x02,SP) 0x80f5 <main+39> 0xF6 LD A,(X) LD A,(X) 0x80f6 <main+40> 0x97 LD XL,A LD XL,A 如果将 ch 定义成全局变量, 则汇编代码为 : main.c:22 ch = *p; // 将写入的内容读到变量 ch 中 0x80ef <main+33> 0x1E01 LDW X,(0x01,SP) LDW X,(0x01,SP) 0x80f1 <main+35> 0xF6 LD A,(X) LD A,(X) 0x80f2 <main+36> 0xB700 LD 0x00,A LD 0x00,A 这一段代码的分析仅供参考, 本人使用的开发环境为 STVD4.1.0, 编译器版本号为 :COSMIC 的 Cx STM STM8 的 C 语言编程 (10)-- 修改 CPU 的时钟 在有些单片机的应用系统中, 并不需要 CPU 运行在多高的频率 在低频率下运行, 芯片的功耗会大大下降 STM8 单片机在运行过程中, 可以随时修改 CPU 运行时钟频率, 非常方便 实现这一功能, 主要涉及到时钟分频寄存器 (CLK_CKDIVR) 时钟分频寄存器是一个 8 位的寄存器, 高 3 位保留, 位 4 和位 3 用于定义高速内部时钟的预分频, 而位 2 到位 0 则用于 CPU 时钟的分频 这 5 位的详细定义如下 :

22 位 4 位 3 高速内部时钟的分频系数 位 2 位 1 位 0 CPU 时钟的分频系数 假设我们使用内部的高速 RC 振荡器, 其频率为 16MHZ, 当位 4 为 0, 位 3 为 1 时, 则内部高速时钟的分频系数为 2, 因此输出的主时钟为 8MHZ 当位 2 为 0, 位 1 为 1, 位 0 为 0 时,CPU 时钟的分频系数为 4, 即 CPU 时钟 = 主时钟 /4=2MHZ 下面的实验程序首先将 CPU 的运行时钟设置在 8MHZ, 然后快速闪烁 LED 指示灯 接着, 通过修改主时钟的分频系数和 CPU 时钟的分频系数, 将 CPU 时钟频率设置在 500KHZ, 然后再慢速闪烁 LED 指示灯 通过观察 LED 指示灯的闪烁频率, 可以看到, 同样的循环代码, 由于 CPU 时钟频率的改变, 闪烁频率和时间长短都发生了变化 同样还是利用 ST 的开发工具, 生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 修改后的代码编译连接后, 就可以下载到开发板上, 运行后会看到 LED 的闪烁频率有明显的变化 // 程序描述 : 通过修改 CPU 时钟的分频系数, 来改变 CPU 的运行速度 #include "STM8S207C_S.h" // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i;

23 while(ms!= 0) for(i=0;i<250;i++) for(i=0;i<75;i++) ms--; main() int i; PD_DDR = 0x08; PD_CR1 = 0x08; PD_CR2 = 0x00; // 将 PD3 设置成推挽输出 CLK_SWR = 0xE1; // 选择芯片内部的 16MHZ 的 RC 振荡器为主时钟 for(;;) // 进入无限循环 // 下面设置 CPU 时钟分频器, 使得 CPU 时钟 = 主时钟 // 通过发光二极管, 可以看出, 程序运行的速度确实明显提高了 CLK_CKDIVR = 0x08; // 主时钟 = 16MHZ / 2 // CPU 时钟 = 主时钟 = 8MHZ for(i=0;i<10;i++) PD_ODR = 0x08; DelayMS(100); PD_ODR = 0x00; DelayMS(100); // 下面设置 CPU 时钟分频器, 使得 CPU 时钟 = 主时钟 /4 // 通过发光二极管, 可以看出, 程序运行的速度确实明显下降了 CLK_CKDIVR = 0x1A; // 主时钟 = 16MHZ / 8 // CPU 时钟 = 主时钟 / 4 = 500KHZ for(i=0;i<10;i++)

24 PD_ODR = 0x08; DelayMS(100); PD_ODR = 0x00; DelayMS(100); STM8 的 C 语言编程 (11)-- 切换时钟源 STM8 单片机的时钟源非常丰富, 芯片内部既有 16MHZ 的高速 RC 振荡器, 也有 128KHZ 的低速 RC 振荡器, 外部还可以接一个高速的晶体振荡器 在系统运行过程中, 可以根据需要, 自由地切换 单片机复位后, 首先采用的是内部的高速 RC 振荡器, 且分频系数为 8, 因此 CPU 的上电运行的时钟频率为 2MHZ 切换时钟源, 主要涉及到的寄存器有 : 主时钟切换寄存器 CLK_SWR 和切换控制寄存器 CLK_SWCR 主时钟切换寄存器的复位值为 0xe1, 表示切换到内部的高速 RC 振荡器上 当往该寄存器写入 0xb4 时, 表示切换到外部的高速晶体振荡器上 在实际切换过程中, 应该先将切换控制寄存器中的 SWEN( 第 1 位 ) 设置成 1, 然后设置 CLK_SWC R 的值, 最后要判断切换控制寄存器中的 SWIF 标志是否切换成功 下面的实验程序首先将主时钟源切换到外部的晶体振荡器上, 振荡频率为 8MHZ, 然后, 然后快速闪烁 LED 指示灯 接着, 将主时钟源又切换到内部的振荡器上, 振荡频率为 2MHZ, 然后再慢速闪烁 LED 指示灯 通过观察 LED 指示灯的闪烁频率, 可以看到, 同样的循环代码, 由于主时钟源的改变的改变, 闪烁频率和时间长短都发生了变化 同样还是利用 ST 的开发工具, 生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 // 程序描述 : 通过切换 CPU 的主时钟源, 来改变 CPU 的运行速度 #include "STM8S207C_S.h" // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i; while(ms!= 0)

25 for(i=0;i<250;i++) for(i=0;i<75;i++) ms--; main() int i; // 将 PD3 设置成推挽输出, 以便推动 LED PD_DDR = 0x08; PD_CR1 = 0x08; PD_CR2 = 0x00; // 启动外部高速晶体振荡器 CLK_ECKR = 0x01; // 允许外部高速振荡器工作 while((clk_eckr & 0x02) == 0x00); // 等待外部高速振荡器准备好 // 注意, 复位后 CPU 的时钟源来自内部的 RC 振荡器 for(;;) // 进入无限循环 // 下面将 CPU 的时钟源切换到外部的高速晶体振荡器上, 在开发板上的频率为 8MHZ // 通过发光二极管, 可以看出, 程序运行的速度确实明显提高了 CLK_SWCR = CLK_SWCR 0x02; // SWEN <- 1 CLK_SWR = 0xB4; // 选择芯片外部的高速振荡器为主时钟 while((clk_swcr & 0x08) == 0); // 等待切换成功 CLK_SWCR = CLK_SWCR & 0xFD; // 清除切换标志 for(i=0;i<10;i++) PD_ODR = 0x08; DelayMS(100); // LED 高速闪烁 10 次

26 PD_ODR = 0x00; DelayMS(100); // 下面将 CPU 的时钟源切换到内部的 RC 振荡器上, 由于 CLK_CKDIVR 的复位值为 0x18 // 所以 16MHZ 的 RC 振荡器要经过 8 分频后才作为主时钟, 因此频率为 2MHZ // 通过发光二极管, 可以看出, 程序运行的速度确实明显下降了 CLK_SWCR = CLK_SWCR 0x02; // SWEN <- 1 CLK_SWR = 0xE1; // 选择 HSI 为主时钟源 while((clk_swcr & 0x08) == 0); // 等待切换成功 CLK_SWCR = CLK_SWCR & 0xFD; // 清除切换标志 for(i=0;i<10;i++) PD_ODR = 0x08; DelayMS(100); PD_ODR = 0x00; DelayMS(100); // LED 低速闪烁 10 次 STM8 的 C 语言编程 (12)-- AD 转换 在许多的单片机应用系统中, 都需要 A/D 转换器, 将模拟量转换成数字量 在 STM8 单片机中, 提供的是 10 位的 A/D, 通道数随芯片不同而不同, 少的有 4 个通道, 多的则有 16 个通道 下面的实验程序首先对 A/D 输入进行采样, 然后将采样结果的高 8 位 ( 丢弃最低的 2 位 ), 作为延时参数去调用延时子程序, 然后再去驱动 LED 控制信号 因此不同的采样值, 决定了 LED 的闪烁频率 当旋转 ST 三合一开发板上的电位器时, 可以看到 LED 的闪烁频率发生变化 同样还是利用 ST 的开发工具, 生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 // 程序描述 : 通过 AD 模块, 采样电位器的电压, 改变 LED 的闪烁频率 #include "STM8S207C_S.h"

27 // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i; while(ms!= 0) for(i=0;i<250;i++) for(i=0;i<75;i++) ms--; main() int i; // 将 PD3 设置成推挽输出, 以便推动 LED PD_DDR = 0x08; PD_CR1 = 0x08; PD_CR2 = 0x00; // 初始化 A/D 模块 ADC_CR2 = 0x00; // A/D 结果数据左对齐 ADC_CR1 = 0x00; // ADC 时钟 = 主时钟 /2=1MHZ // ADC 转换模式 = 单次 // 禁止 ADC 转换 ADC_CSR = 0x03; // 选择通道 3 ADC_TDRL = 0x20; for(;;) // 进入无限循环

28 ADC_CR1 = 0x01; // CR1 寄存器的最低位置 1, 使能 ADC 转换 for(i=0;i<100;i++); // 延时一段时间, 至少 7uS, 保证 ADC 模块的上电完成 ADC_CR1 = ADC_CR1 0x01; // 再次将 CR1 寄存器的最低位置 1 // 使能 ADC 转换 while((adc_csr & 0x80) == 0); // 等待 ADC 结束 i = ADC_DRH; DelayMS(i); // 读出 ADC 结果的高 8 位 // 延时一段时间 PD_ODR = PD_ODR ^ 0x08; // 将 PD3 反相 STM8 的 C 语言编程 (13)-- 蜂鸣器 蜂鸣器是现在单片机应用系统中很常见的, 常用于实现报警功能 为此 STM8 特别集成了蜂鸣器模块, 应用起来非常方便 在应用蜂鸣器模块时, 首先要打开片内的低速 RC 振荡器 ( 当然也能使用外部的高速时钟 ), 其频率为 128KHZ 然后通过设置蜂鸣器控制寄存器 BEEP_CSR 中的 BEEPDIV[4:0] 来获取 8KHZ 的时钟, 再通过 BEEPSEL 最终产生 1KHZ 或 2KHZ 或 4KHZ 的蜂鸣器时钟, 最后使能该寄存器中的 BEEPEN 位, 产生蜂鸣器的输出 下面的实验程序首先初始化低速振荡器, 然后启动蜂鸣器, 再延时 2.5 秒, 然后关闭蜂鸣器 同样还是利用 ST 的开发工具, 生成一个汇编程序的框架, 然后修改其中的 main.c, 修改后的代码如下 // 程序描述 : 启动单片机中的蜂鸣器模块 #include "STM8S207C_S.h" // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i; while(ms!= 0) for(i=0;i<250;i++)

29 for(i=0;i<75;i++) ms--; main() int i; CLK_ICKR = CLK_ICKR 0x08; while((clk_ickr & 0x10) == 0); // 打开芯片内部的低速振荡器 LSI // 等待振荡器稳定 // 通过设置蜂鸣器控制寄存器, 来打开蜂鸣器的功能 // 蜂鸣器控制寄存器的设置 : // BEEPDIV[1:0] = 00 // BEEPDIV[4:0] = 0e // BEEPEN = 1 // 蜂鸣器的输出频率 = Fls / ( 8 * (BEEPDIV + 2) )= 128K / (8 * 16) = 1K BEEP_CSR = 0x2e; for(i=0;i<10;i++) DelayMS(250); BEEP_CSR = 0x1e; while(1); // 关闭蜂鸣器 STM8 的 C 语言编程 (14)-- PWM 在单片机应用系统中, 也常常会用到 PWM 信号输出, 例如电机转速的控制 现在很多高档的单片机也都集成了 PWM 功能模块, 方便用户的应用

30 对于 PWM 信号, 主要涉及到两个概念, 一个就是 PWM 信号的周期或频率, 另一个就是 PWM 信号的占空比 例如一个频率为 1KHZ, 占空比为 30%, 有效信号为 1 的 PWM 信号, 在用示波器测量时, 就是高电平的时间为 300uS, 低电平的时间为 700uS 的周期波形 在单片机中实现 PWM 信号的功能模块, 实际上就是带比较器的计数器模块 首先该计数器循环计数, 例如从 0 到 N, 那么这个 N 就决定了 PWM 的周期,PWM 周期 =(N+1)* 计数器时钟的周期 在计数器模块中一定还有一个比较器, 比较器有 2 个输入, 一个就是计数器的当前值, 另一个是可以设置的数, 这个数来自一个比较寄存器 当计数器的值小于比较寄存器的值时, 输出为 1( 可以设置为 0), 当计数器的值大于或等于比较寄存器的值时, 输出为 0( 也可设置为 1, 与前面对应 ) 了解了这个基本原理后, 我们就可以使用 STM8 单片机中的 PWM 模块了 下面的实验程序首先将定时器 2 的通道 2 设置成 PWM 输出方式, 然后通过设置自动装载寄存器 TIM2_CCR2, 决定 PWM 信号的周期 在程序的主循环中, 循环修改占空比, 先是从 0 逐渐递增到 128, 然后再从 128 递减到 0 当把下面的程序在 ST 的三合一板上运行时, 可以看到发光二极管 LD1 逐渐变亮, 然后又逐渐变暗, 就这样循环往复 如果用示波器看, 可以看到驱动 LD1 的信号波形的占空比从 0 变到 50%, 然后又从 50% 变到 0 同样还是利用 ST 的开发工具, 生成一个 C 语言程序的框架, 然后修改其中的 main.c, 修改后的代码如下 // 程序描述 : 用 PWM 输出驱动 LED #include "STM8S207C_S.h" void CLK_Init(void); void TIM_Init(void); // 函数功能 : 延时函数 // 输入参数 :ms -- 要延时的毫秒数, 这里假设 CPU 的主频为 2MHZ // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void DelayMS(unsigned int ms) unsigned char i; while(ms!= 0) for(i=0;i<250;i++) for(i=0;i<75;i++)

31 ms--; // 函数功能 : 初始化时钟 // 输入参数 : 无 // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void CLK_Init() CLK_CKDIVR = 0x11; // 10: fhsi = fhsi RC output/ 4 // = 16MHZ / 4 =4MHZ // 001: fcpu=fmaster/2. = 2MHZ // 函数功能 : 初始化定时器 2 的通道 2, 用于控制 LED 的亮度 // 输入参数 : 无 // 输出参数 : 无 // 返回值 : 无 // 备注 : 无 void TIM_Init() TIM2_CCMR2 = TIM2_CCMR2 0x70;// Output mode PWM2. // 通道 2 被设置成比较输出方式 // OC2M = 111, 为 PWM 模式 2, // 向上计数时, 若计数器小于比较值, 为无效电平 // 即当计数器在 0 到比较值时, 输出为 1, 否则为 0 TIM2_CCER1 = TIM2_CCER1 0x30;// CC polarity low,enable PWM output */ // CC2P = 1, 低电平为有效电平 // CC2E = 1, 开启输出引脚 // 初始化自动装载寄存器, 决定 PWM 方波的频率,Fpwm= /256=15625HZ TIM2_ARRH = 0; TIM2_ARRL = 0xFF; // 初始化比较寄存器, 决定 PWM 方波的占空比 TIM2_CCR2H = 0;

32 TIM2_CCR2L = 0; // 初始化时钟分频器为 1, 即计数器的时钟频率为 Fmaster=4MHZ TIM2_PSCR = 0; // 启动计数 TIM2_CR1 = TIM2_CR1 0x01; main() unsigned char i; CLK_Init(); TIM_Init(); // 初始化时钟 // 初始化定时器 while(1) // 进入无限循环 // 下面的循环将占空比逐渐从 0 递增到 50% for(i=0;i<128;i++) TIM2_CCR2H = 0; TIM2_CCR2L = i; DelayMS(5); // 下面的循环将占空比逐渐从 50% 递减到 0 for(i=128;i>0;i--) TIM2_CCR2H = 0; TIM2_CCR2L = i; DelayMS(5);

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

bingdian001.com

bingdian001.com TSM12M TSM12 STM8L152C6, STM8L152R8 MSP430F5325 whym1987@126.com! /******************************************************************************* * : TSM12.c * : * : 2013/10/21 * : TSM12, STM8L f(sysclk)

More information

目录

目录 ALTERA_CPLD... 3 11SY_03091... 3 12SY_03091...4....5 21 5 22...8 23..10 24..12 25..13..17 3 1EPM7128SLC.......17 3 2EPM7032SLC.......18 33HT46R47......19..20 41..20 42. 43..26..27 5151DEMO I/O...27 52A/D89C51...28

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

untitled

untitled www.mcudriver.cn 1.1 / 1) WinAVR20070525 2) Source Insight 3) ISP 4) PonyProg ISP 5) USB 6) 1.2. MCU ATMEGA16 1.3. AVR8 1.4 LED0~LED7 1 1.5 #include // Program 1.1 LED.C #define uchar unsigned

More information

Microsoft Word - MAN2011A_CH_RTT.doc

Microsoft Word - MAN2011A_CH_RTT.doc 基于 SAM7X EK 和 IAR EWARM 文档编号 文档版本 Rev. A 文档摘要 基于 AT91SAM7X EK 开发板的代码解读,RTT 代码解读 关键词 AT91SAM7X256 SAM7X EK IAR EWARM J LINK RTT 创建日期 2010 06 08 创建人员 Cust126 审核人员 Robin 文档类型 公开发布 / 开发板配套文件 版权信息 Mcuzone 原创文档,

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

图 内部结构图 8251 的外部引脚如图 所示, 共 28 个引脚, 每个引脚信号的输入输出方式如图中的箭 头方向所示

图 内部结构图 8251 的外部引脚如图 所示, 共 28 个引脚, 每个引脚信号的输入输出方式如图中的箭 头方向所示 实验题目 : 串行接口芯片 8251 实验目的 : 1. 掌握 8251 的工作方式及应用 2. 了解有关串口通讯的知识 串行接口芯片 8251 3. 掌握使用 8251 实现双机通讯的软件编程和电路连接 实验设备 : IA-32 架构的微机系统及应用教学平台两套 实验原理 : 1. 8251 的基本性能 性能 : 8251 是可编程的串行通信接口, 可以管理信号变化范围很大的串行数据通信 有下列基本

More information

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - MSP430 Launchpad 指导书.docx Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project

More information

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC LCD PIC 单片机解决方案 集成 LCD 驱动器模块的 PIC 单片机 www.microchip.com/lcd ,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC,

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

+00DE _01EN.book

+00DE _01EN.book TCS-NET MODBUS TCS-NET Modbus TCB-IFMB640TLE 1...... 2 2 RS 485... 3 3... 3 4... 4 5... 4 6... 5 7... 6 8... 16 TCS-NET Modbus 1 http://www.modbus-ida.org/ >=3.5 8 8 N*8 ( N = 252.) 16 >= 3.5 Modbus-Master

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0 SH79F6431 1. SH79F6431 1T 8051 FLASH SH79F JET51 Keil µ vision JTAG 1.1. SH79F6431 LQFP64 1.2. (Target Board) SH79F6431 1 V 1.0 1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F6431 1 2 1 B. 1(VCC/GND)

More information

2 12

2 12 SHENZHEN BRILLIANT CRYSTAL TECHNOLOGIC CO.,LTD. The specification for the following models Graphic LCM serial communication control board CB001 PROPOSED BY APPROVED Design Approved TEL:+86-755-29995238

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

JLX

JLX PRODUCT:LCD MODULE. Model No.: JLX177-006 Product Type: 1.77 inch QVGA TFT Modoule. 产品规格书 晶联讯研发研发部 : Written By Checked By Approved By 客户名称 : 结构电子核准 地址 : 深圳市宝安区西乡宝安大道东华工业区 A3 栋 6 楼电话 :0755-29784961 Http://www.jlxlcd.cn

More information

Microsoft Word - mcu-an z-10.doc

Microsoft Word - mcu-an z-10.doc 富士通微电子 ( 上海 ) 有限公司应用笔记 MCU-AN-500004-Z-10 F²MC-8FX 家族 8 位微控制器 MB95200H/210H 系列 8/16 位多功能定时器 应用笔记 变更履历 变更履历 日期作者修正记录 2008-03-20 Levi Zhang V1.0, 第一版 本手册共 40 页 1. 本文档记载的产品信息及规格说明如有变动, 恕不预先通知 如需最新产品信息和 /

More information

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模 新一代超低功耗 16 位单片机 TI MSP430 系列 美国 TI 公司的 MSP430 系列单片机可以分为以下几个系列 X1XX X3XX X4XX 等等 而且 在不断发展 从存储器角度 又可分为 ROM C 型 OTP P 型 EPROM E 型 Flash Memory F 型 系列的全部成员均为软件兼容 可以方便地在系列各型号间移植 MSP430 系列单片机 的 MCU 设计成适合各种应用的

More information

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63>

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63> 实验四 ARM 的 I/O 接口实验 一 实验目的 1. 了解 S3C44B0X 的通用 I/O 接口 2. 掌握 I/0 功能的复用并熟练的配置, 进行编程实验二 实验设备 1. EL-ARM-830 教学实验箱,PentiumII 以上的 PC 机, 仿真器电缆 2. PC 操作系统 WIN98 或 WIN2000 或 WINXP,ARM SDT2.5 或 ADS1.2 集成开发环境, 仿真器驱动程序

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD Leica MC170 HD Leica MC190 HD 5 6 7 8 11 12 13 14 16 HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD 22 23 24 26 Leica MC170 HD Leica MC190 HD ( ) 28

More information

STM8单片机入门

STM8单片机入门 STM8 单片机入门 2010-08-19 -2- 目 录 1 STM8 微控制器简介...3 1.1 STM8S 系列...3 1.2 STM8L 系列...5 1.3 STM8A 系列...7 1.4 STM8 微控制器网站...9 2 STM8 集成开发环境简介...11 2.1 ST TOOLSET...11 2.2 COSMIC...13 2.3 IAR...16...18 3.1 STVD

More information

Microsoft Word - Twin-CANÀý³Ì½éÉÜ.doc

Microsoft Word - Twin-CANÀý³Ì½éÉÜ.doc 样例程序 :TwinCAN 模块使用 1. 简介本程序实现功能如下 : 利用 TwinCAN 模块的两个 CAN 节点 A B, 配置内部自带的 32 消息对象, 可修改各个对象的属性, 如传输方向 ( 发送 接收 ),ID,MASK, 隶属节点名及传输数据内容 由于 DAVE 生成的 CAN 相关代码会超过 KEIL uvision 软件评估版本的限制大小 因此需安装完整版本的 KEIL uvision

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

2

2 第六章.DC-DC 升压模块 1 2 3 4 5 程序通过 PB7 口产生 PWM 波控制 tps61165 工作, 完成 LED 串点亮以及电流控制, 可通过 LCD 开发板上的滚轮调节 PWM 波的占空比进而实现电流的调节 ; 通过 PE2 的 ADC 功能读取电压测量电路中的 OPA330 的输出电压, 并根据电路原理图计算出测量点的电压值, 显示在 LCD 上 ; 通过 PE3 的 ADC

More information

2005.book

2005.book ...4... 4... 7...10... 10... 10... 10... 10... 11... 11 PCC... 11 TB170... 12 /... 12...13... 13 BP150 / BP151 / BP152 / BP155... 14...15... 15... 15... 15... 15... 15... 15... 16 PS465 / PS477... 17 PS692

More information

极客良品 -CC3200xx wifi 学习板 -PWM 实验 CC32xx-PWM 实验 片内定时器功能介绍 ( 使用的 mcu 外设和上一个节内容是一样的 ) 该 CC320 包含 4 个 32 位用户可编程通用定时 (GPTA0~3 或有文档标注为 TIMERA0~3),GPT 可以用于对具有

极客良品 -CC3200xx wifi 学习板 -PWM 实验 CC32xx-PWM 实验 片内定时器功能介绍 ( 使用的 mcu 外设和上一个节内容是一样的 ) 该 CC320 包含 4 个 32 位用户可编程通用定时 (GPTA0~3 或有文档标注为 TIMERA0~3),GPT 可以用于对具有 CC32xx-PWM 实验 片内定时器功能介绍 ( 使用的 mcu 外设和上一个节内容是一样的 ) 该 CC320 包含 4 个 32 位用户可编程通用定时 (GPTA0~3 或有文档标注为 TIMERA0~3),GPT 可以用于对具有定时器复用功能的管脚进入的外部事件进行计数或计时, 也可以在输出引脚上产生脉冲宽度调试 (PWM) 信号 每个 GPT 模块包含两个 16 位定时 / 计数器 (TimerA

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

CHCN_8-14_K.indd

CHCN_8-14_K.indd 是德科技 三个理由让您选择深存储快响应示波器 应用指南 介绍 1. 更长的波形捕获时间 = / 1 1 Mpts 10 GSa/s 1 2 100 Mpts 10 1. = / 1 Mpts 10 GSa/s 1 ms 2. = / 100 Mpts 10 GSa/s 10 ms 3 12.5 Mpts 3 300 Kpts 3 3. 3 12.5 Mpts 3 300 Kpts? Agilent

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 STC 单片机 CCP/PCA/PWM 模块原理及实现 主讲 : 何宾 Email:hebin@mail.buct.edu.cn 2016.03 CCP/PCA/PWM 结构 STC15 系列部分单片机内部集成了三路 CCP/PCA/PWM 模块, 如图 24.1 所示 注 : STC15W1K16S STC15W404S STC15W201S STC15F100W 系列单片机无 CCP/PCA/PWM

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

29 0. 0.1 0.2 0.3 1. 30 1840 1930 1932 1926 35 51 55 214 1 31 1988 3 2. 2.1 3 2000 2.2 79 1 52 32 56 57 57 2 2.3. 2 10 4 40 16 4 64 2.4 3. 3.0 3.1 1 Hz 33 193ms 176 174 169 167 165 163 162 160 159 (T )

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

STM8L IAP 应用程序中编程指导

STM8L  IAP 应用程序中编程指导 STM8L IAP 使用说明 前言 本篇主要介绍 STM8Lxxxx 如何实现在应用程序中编程 (In-application programming) 1. IAP user Flash 分配框图及中断向量表重定向 0x8000 0x8080 0x9000 中断向量表重定向 0x9080 图 1:IAP 代码在 User Flash 中的空间分配 注意 : 1 和 2 为 IAP 代码空间 为客户自己的

More information

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63> 1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作

More information

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica CP Chip Power ARM Cortex-M3 (STM32F) ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplication and hardware

More information

25.( 0 在 進 行 水 溫 與 溶 解 量 的 實 驗 時, 每 一 匙 糖 都 要 刮 平 的 主 要 目 的 為 何? 1 避 免 一 次 溶 解 太 多 糖 2 可 以 增 加 溶 解 糖 的 次 數 3 控 制 加 入 的 每 一 匙 糖 都 一 樣 多 4 可 以 減 少 溶 解 量

25.( 0 在 進 行 水 溫 與 溶 解 量 的 實 驗 時, 每 一 匙 糖 都 要 刮 平 的 主 要 目 的 為 何? 1 避 免 一 次 溶 解 太 多 糖 2 可 以 增 加 溶 解 糖 的 次 數 3 控 制 加 入 的 每 一 匙 糖 都 一 樣 多 4 可 以 減 少 溶 解 量 五 上 自 然 與 生 活 科 技 科 第 四 單 元 水 溶 液 一 選 擇 題 01.( 0 下 列 哪 一 種 方 法 可 以 辨 識 出 水 溶 液 的 酸 鹼 性? 1 用 眼 睛 仔 細 觀 察 2 用 電 池 電 線 和 小 燈 泡 來 測 試 3 用 食 鹽 水 來 辨 識 4 用 紫 羅 蘭 花 的 汁 液 來 測 試 02.( 0 下 列 哪 一 種 水 溶 液 不 是 中 性

More information

课外创新研学项目 构想、设计与实现

课外创新研学项目                   构想、设计与实现 实 验 教 学 改 革 与 学 科 竞 赛 相 互 促 进 东 南 大 学 电 工 电 子 实 验 中 心 胡 仁 杰 hurenjie@seu.edu.cn 主 要 内 容 全 国 大 学 生 电 子 设 计 竞 赛 发 展 概 况 竞 赛 设 计 概 要 创 新 实 验 教 学 实 践 环 境 建 设 全 国 大 学 生 电 子 设 计 竞 赛 宗 旨 结 合 教 学, 着 重 基 础 注 重

More information

TD

TD *TD-000212-05* 20- 应用实例 4 本例显示的是使用两个亚低 音扬声器和多个顶箱的双声 道 立体声 设置 除了各声道都增加了一个顶 箱外 也可以增加更多的顶 箱 本例和例 3 的情况一 致 声道 2 或 右声道 声道 1 或 左声道 要接到更多的顶箱 将最后 一个顶箱的全幅线路输出接 头处的线缆接到下一个顶箱 的全幅线路输入接头 在不 降低信号质量的情况下 最

More information

第 1 章 MSP430 快速入门 因为最近转入 MPS430 的技术支持工作, 所以现在开始学习 430 的开发 由于之前用过 51, 也用过 TI 的 ARM CORTEX-M3, 但是就是没有用过 TI 的 430, 所以将 我学习 430 的过程写出来, 给像我一样之前没有 430 开发经验

第 1 章 MSP430 快速入门 因为最近转入 MPS430 的技术支持工作, 所以现在开始学习 430 的开发 由于之前用过 51, 也用过 TI 的 ARM CORTEX-M3, 但是就是没有用过 TI 的 430, 所以将 我学习 430 的过程写出来, 给像我一样之前没有 430 开发经验 目录 第 1 章 MSP430 快速入门...1 1.1 准备工作... 1 1.2 MSP430 的时钟系统... 3 1.3 DCO 时钟校准...3 1.4 硬件最小系统...4 1.5 在 IAR 下新建工程...4 i/11 第 1 章 MSP430 快速入门 因为最近转入 MPS430 的技术支持工作, 所以现在开始学习 430 的开发 由于之前用过 51, 也用过 TI 的 ARM CORTEX-M3,

More information

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe   Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L 1 SH88F516 8051 64K FLASH 1024 EEPROM SH88F516 JET51 S-Lab Keil µ vision ISP51 Keil µ vision ISP51 ISP51 PC RS232 MCU SH88F516 SH88F516 1.1 SH88F516 1.1 SH88F516 SH88Fxx: QFP44, DIP40 RAM Flash E2 ADC

More information

DVK530/531扩展板

DVK530/531扩展板 DVK720 扩展板 驱动移植手册 2014.04.03 V1.0 版权声明 本手册所有权由深圳市微雪电子有限公司独家持有 未经本公司的书 面许可, 不得以任何方式或形式进行修改 分发或复制本文档的任何 部分, 否则一切后果由违者自负 版本更新记录 版本日期说明 V1.0 2014.04.03 初始发布 深圳市微雪电子有限公司 www.waveshare.net I 目录 版权声明... I 版本更新记录...

More information

HT46R47 f SYS =4MHz 3.3~5.5V f SYS =8MHz 4.5~5.5V 13 位双向输入 / 输出口 1 个与输入 / 输出共用引脚的外部中断输入 8 位带溢出中断的可编程定时 / 计数器 具有 7 级预分频器 石英晶体或 RC 振荡器 位的程序存储器 P

HT46R47 f SYS =4MHz 3.3~5.5V f SYS =8MHz 4.5~5.5V 13 位双向输入 / 输出口 1 个与输入 / 输出共用引脚的外部中断输入 8 位带溢出中断的可编程定时 / 计数器 具有 7 级预分频器 石英晶体或 RC 振荡器 位的程序存储器 P HT46R/47R/48R/49R 系列 选型指南 HT46R22 f SYS =4MHz 3.3~5.5V f SYS =8MHz 4.5~5.5V 19 位双向输入 / 输出口 1 个与输入 / 输出口线共用的外部输入 16 位具有 7 级预分频带溢出中断的可编程定时 / 计数器 内置石英晶体或 RC 振荡器 2048 14 位的程序存储器 PROM 64 8 位的数据存储器 RAM 支持发声的

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x 115 AVR W.V. Awdrey ATMEL AVR PIC AVR PIC AVR RISC AVR PIC AVR AVR AVR AVR AVR ATtiny15 AVR AVR AVR RAM ROM 121 116 122 ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r31 3 16 X Y Z 6-1 118 7 0

More information

STM8系列单片机入门

STM8系列单片机入门 ST( ( 意法半导体 ) 8 位微控制器系列 STM8 系列单片机入门 2011-06-15 目录 1 STM8 系列微控制器简介...3 1.1 STM8S 系列...3 1.2 STM8L 系列...5 1.3 STM8A 系列...7 1.4 STM8 系列微控制器网站...9 2 STM8 集成开发环境简介...10 2.1 ST TOOLSET...10 2.2 COSMIC...11

More information

从MCS51向AVR的快速转换.PDF

从MCS51向AVR的快速转换.PDF MCS51 AVR MCS51 AVR ATMEL AVR RISC MCS51 AVR 1 MHZ 1MIPS 8MHZ AVR 224MHZ MCS51 FLASH EEPROM ISP WatchDog AVR MCS51 AT90S1200/2313 AT89C1051/2051 AT90S4414/8515 AT89C51/52 PCB / AVR C ICCAVR60 AVR C IAR

More information

X713_CS_Book.book

X713_CS_Book.book / / /USB ) ; ; C D ; ; B B 1 >> 2 3 B 1 ( > > ) 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 GSM GPS ( ) 手机已连接到 GSM 网络 指示条越多, 接收质量越好 GPS 2 ...........................4.............................. 4 Micro SD (

More information

F²MC-8L/16LX/FR FAMILY

F²MC-8L/16LX/FR FAMILY 富士通半导体 ( 上海 ) 有限公司应用笔记 MCU-AN-500077-Z-12 F²MC-8FX 家族 8 位微型控制器 MB95430 系列 16 位 FRT 和 OCU 应用笔记 修改记录 修改记录 版本日期作者修改记录 1.0 2010-03-12 Kevin. Lin 初稿 1.1 2010-04-12 Kevin. Lin 更新 1.2 2010-09-27 Kevin. Lin 更新源代码

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7 上海东软载波微电子有限公司 SMART www.essemi.com SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input 06 6 6 HR7PPSC HR7PPSD SOP SOP6 +input 06 6 +input 06 6 6 6 HR7PERB SSOP0 7+input 06 6 6 HR7PESC

More information

CM ZT1

CM ZT1 Spansion 模拟和微控制器产品 本文档包含有关 Spansion 模拟和微控制器产品的信息 尽管本文档内有原来开发该产品规格的公司名称 富士通 或 Fujitsu, 该产品将由 Spansion 提供给现有客户和新客户 规格的延续本文档内容并不因产品供应商的改变而有任何修改 文档内容的其他更新, 均为改善文档而进行, 并已记录在文档更改摘要 日后如有需要更改文档, 其更改内容也将记录在文档更改摘要

More information

STC15W4K60S4系列增强型PWM波形发生器应用

STC15W4K60S4系列增强型PWM波形发生器应用 STC15W4K32S4 系列新增 6 通道增强型带死区控制高精度 PWM 波形发生器应用 STC15W4K32S4 系列的单片机集成了一组 ( 各自独立 6 路 ) 增强型的 PWM 波形发生器 PWM 波形发生器内部有一个 15 位的 PWM 计数器供 6 路 PWM 使用, 用户可以设置每路 PWM 的初始电平 另外,PWM 波形发生器为每路 PWM 又设计了两个用于控制波形翻转的计数器 T1/T2,

More information

Microsoft Word - 部分习题参考答案.doc

Microsoft Word - 部分习题参考答案.doc 部分习题参考答案 第 1 章 1.1 (1) U ab 5 (2) U ab 5 () I 2 () I 2 1.2 (a)-10w(b)-8w,0w(c)-50w,25w 1. () P 560 W, P 50 W, P 600 W, P 20 W, P 180 W 1. I 2 m U 60 1.5 P 50 W 1.6 U 26, U 7 ac bd 1.7 U ab 11, I, I 2,

More information

Microsoft Word - ISSFA-0134_A_AP_User-definedDownload_SC_.doc

Microsoft Word - ISSFA-0134_A_AP_User-definedDownload_SC_.doc 自定义下载应用说明 一 适用产品 :SM59XX 系列 SM59D XX 系列 SM59R XX 系列二 应用方式 : 可以让使用者自定义 command 作为进入 ISP 刻录的通关指令, 透过 UART 连接 ISAP 软件做联机更新三 操作说明 ( 使用 SM59D04G2 为例 ): 1. ISAP 操作方式 : 1.1 先将主程序及 ISP 服务程序烧进 MCU 中 1.2 将 MCU 放至系统版上,

More information

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63> 臺 北 市 立 松 山 高 級 工 農 職 業 學 校 資 訊 科 專 題 製 作 報 告 題 目 : 反 彈 空 間 指 導 老 師 : 余 耀 銘 學 生 : 廖 國 銓 趙 信 瑋 中 華 民 國 102 年 5 月 摘 要 在 這 高 速 科 技 的 起 飛 下, 科 技 都 建 立 起 於 基 礎, 有 些 人 把 這 基 礎 轉 為 理 論, 教 給 大 眾 學 習 ; 有 些 人 利

More information

MCCB EMI EMI

MCCB EMI EMI HD5L HD5L HD5L 4008-858 -959 189 4871 3800 MCCB EMI EMI ... 1 1.1... 1 1.2... 1 1.3... 2... 3 2.1... 3 2.2... 3 2.3... 4 2.4... 5 2.5... 6... 9 3.1... 9 3.2... 9 3.3... 10 3.4... 10 3.5... 12 3.6... 13...

More information

Microsoft Word - MAN2023A_CH_APPONE.doc

Microsoft Word - MAN2023A_CH_APPONE.doc AT91 softpack 1.5 代码解读 基于 SAM7X EK 综合应用代码解读 文档编号 文档版本 Rev. A 文档摘要 基于 AT91SAM7X EK 开发板的代码解读,GPIO H161T01 代码解读 关键词 AT91SAM7X256 系统板 创建日期 2010 07 14 创建人员 Cust126 审核人员 Robin 文档类型 公开发布 / 开发板配套文件 版权信息 Mcuzone

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc 2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.

More information

<4D6963726F736F667420576F7264202D20B5E7D7D3D0C5CFA2C0E0D7A8D2B5C5E0D1F8B7BDB0B8D0DEB6C1D6B8C4CF2E646F63>

<4D6963726F736F667420576F7264202D20B5E7D7D3D0C5CFA2C0E0D7A8D2B5C5E0D1F8B7BDB0B8D0DEB6C1D6B8C4CF2E646F63> 福 州 大 学 校 训 博 学 远 志 明 德 至 诚 序 言 亲 爱 的 电 子 信 息 类 的 学 子 : 朝 气 蓬 勃 的 你 们 带 着 对 大 学 生 活 的 美 好 憧 憬 走 进 校 园, 开 始 谱 写 人 生 历 程 崭 新 辉 煌 的 一 页 你 们 将 在 这 风 景 如 画 的 福 州 大 学 新 校 区 里, 与 周 围 的 同 学 们 一 起 汲 取 知 识 培 养 能

More information

STEP-MXO2 V2硬件手册

STEP-MXO2 V2硬件手册 小脚丫 STEP FPGA STEP 2016/8/28 目录 1. 概述... 2 2.STEP-MXO2 V2 硬件简介 :... 3 2.1 STEP-MXO2 V2 开发板... 3 2.2 FT232 编程器... 3 2.3 FPGA... 3 2.4 供电... 4 2.5 时钟... 4 2.6 七段数码管... 4 2.7 三色 LED... 4 2.8 拨码开关... 4 2.9

More information

<4D F736F F D20B5A5C6ACBBFAD4ADC0EDD3EBD3A6D3C3BCB B3CCD0F2C9E8BCC65FB5DA33B0E65F2DD6D5B8E52D4E65772DBFB1CEF3B1ED2DB3F6B0E6C9E72E646F6378>

<4D F736F F D20B5A5C6ACBBFAD4ADC0EDD3EBD3A6D3C3BCB B3CCD0F2C9E8BCC65FB5DA33B0E65F2DD6D5B8E52D4E65772DBFB1CEF3B1ED2DB3F6B0E6C9E72E646F6378> 单片机原理与应用及 C51 程序设计 ( 第 3 版 )- 终稿 -New 勘误表 1. P18 页 11 行原来 : 汇编语言 机器语言 功能 MOV AL,01H 1011 0000 0000 0011B ; 把 01 送入累加器 A ADD AL,02H 0000 0100 0000 0101B ;02 与 A 中内容相加, 结 果存入 A HLT 11110100B ; 停止操作 汇编语言

More information

Microsoft Word - T12_T13_AD_PECÀý³Ì½éÉÜ.doc

Microsoft Word - T12_T13_AD_PECÀý³Ì½éÉÜ.doc 样例程序 : T12 + T13 + AD + PEC 1. 简介本程序实现功能如下 : 配置 CCU6 工作于三相输出模式 使用通道 0 比较匹配中断触发 T13 内部硬件直接实现 T13 工作于 Single shot 模式, 当周期中断时, 硬件触发 ADC (Injection mode) 转换完成以后, 使用 PEC 将存放于 ADC_DAT2 中的转换结果传送到用户指定的数组中 PEC

More information

第一次段考 二年級社會領域試題 郭玉華 (A)(B) (C)(D)

第一次段考   二年級社會領域試題 郭玉華   (A)(B) (C)(D) 五 福 二 社 p1 高 雄 市 立 五 福 國 民 中 學 97 學 年 度 第 1 學 期 第 1 次 段 考 二 年 級 社 會 學 習 領 域 試 題 卷 代 號 :30 答 案 卡 塗 寫 注 意 事 項 1. 答 案 卡 劃 記 時, 必 須 用 黑 色 2B 鉛 筆 塗 黑 塗 滿, 但 不 可 超 出 圈 外 2. 年 班 級 座 號 科 目 請 劃 記 正 確 若 劃 記 錯 誤,

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

Microsoft Word - mcu-an z-10.doc

Microsoft Word - mcu-an z-10.doc 富士通微电子 ( 上海 ) 有限公司应用笔记 MCU-AN-500009-Z-10 F²MC-8FX 家族 8 位微控制器 MB95200H/210H 系列 DBG 引脚的使用方法 应用笔记 变更履历 变更履历 日期作者修改记录 2008-03-18 Raven Peng V1.0, 第 1 版 本文档由 12 页构成 1. 本文档记载的产品信息及规格说明如有变动, 恕不预先通知 如需最新产品信息和

More information

Microsoft Word - LMB402CBC-AppNote-V0.1.doc

Microsoft Word - LMB402CBC-AppNote-V0.1.doc LMB402CBC 液晶显示模块应用参考 深圳市拓普微科技开发有限公司 版本描述日期编者 0.1 新版本 2006-02-09 杨军 http://www.topwaysz.com 1 / 1 目录 1 概述 3 2 硬件接口 3 3 软件特性 3 3.1 控制器接口信号说明 3 3.2 模块指令系统 4 4 显示数据存储器的地址 4 5 字符发生器 CGRAM 的地址 5 6 应用举例 5 6.1

More information

电子技术基础 ( 第 版 ) 3. 图解单相桥式整流电路 ( 图 4-1-3) 电路名称电路原理图波形图 整流电路的工作原理 1. 单相半波整流电路 u 1 u u sin t a t 1 u 0 A B VD I A VD R B

电子技术基础 ( 第 版 ) 3. 图解单相桥式整流电路 ( 图 4-1-3) 电路名称电路原理图波形图 整流电路的工作原理 1. 单相半波整流电路 u 1 u u sin t a t 1 u 0 A B VD I A VD R B 直流稳压电源 第 4 章 4.1 整流电路及其应用 学习目标 1. 熟悉单相整流电路的组成, 了解整流电路的工作原理. 掌握单相整流电路的输出电压和电流的计算方法, 并能通过示波器观察整流电路输出电压的波形 3. 能从实际电路中识读整流电路, 通过估算, 能合理选用整流元器件 4.1.1 认识整流电路 1. 图解单相半波整流电路 ( 图 4-1-1) 电路名称电路原理图波形图 4-1-1. 图解单相全波整流电路

More information

PIC16F F MPLAB 08 16F LED 15 LED

PIC16F F MPLAB 08 16F LED 15 LED PIC16F877 PIC16F877 03 16F877 05 06 MPLAB 08 16F877 13 LED 15 LED 17 20 24 2 PIC16F877 PIC16F877 DIP VDD VSS CLOCK CPU :,AND,OR,XOR ROM: CPU ROM RAM: CPU,CPU I/O:CPU, CPU,, 16F877 RAM 512 128 Bank Bank

More information

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc 可程序计数数组 (PCA) 功能使用方法 1 适用产品 :SM59D04G2,SM59D03G2 2 应用说明 : PCA 共有五组, 每组皆可工作于以下七种模式 : 捕获模式 - 正缘捕获模式 (Positive edge capture mode) 捕获模式 - 负缘捕获模式 (Negative edge capture mode) 捕获模式 - 正缘及负缘捕获模式 (Both positive

More information

Microsoft Word - 实用案例.doc

Microsoft Word - 实用案例.doc 计 算 机 系 统 应 用 2009 年 第 12 期 嵌 入 式 Linux 下 温 湿 度 传 感 器 的 设 计 与 实 现 1 Design and Implementation of Temperature and Humidity Sensor Based on Embedded Linux 陈 博 刘 锦 高 ( 华 东 师 范 大 学 电 子 科 学 技 术 系 上 海 200241)

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

Ps22Pdf

Ps22Pdf ( ) ( 150 ) 25 15 20 40 ( 25, 1, 25 ), 1. A. B. C. D. 2. A. B. C. D. 3., J = 1 H = 1 ( A B, J', J, H ) A. A = B = 1, J' =0 B. A = B = J' =1 C. A = J' =1, B =0 D. B = J' = 1, A = 0 4. AB + AB A. AB B. AB

More information

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12 ... 3... 3... 3... 3... 4 1JTAG ICE PC... 4 2JTAG ICE... 4 3... 4 4... 4 5JTAG... 5 6ISP... 5 IDE... 6 1 AVR STUDIO... 6 2 JTAGICE... 6 3JTAGICE... 12 4.... 16 5.... 17 6. JTAG ICE... 19 ISP... 20 1PonyProg2000...

More information

Andes Technology PPT Temp

Andes Technology PPT Temp 晶心科技線上技術研討會 AndesCore 便捷的全 C 嵌入式编程 晶心科技市場及技術服務部毛礼杰軟件經理 WWW.ANDESTECH.COM 大纲 系统初始化介绍 异常和中断说明 全 C 语法例子说明 总结 2 CPU 相关特性 1: 中断向量表 系统初始化 (1) 2: 系统寄存器 通常需要用 assembly( 汇编 / 组合 ) 语言来操作 AndesCore 全 C 嵌入式编程 C 扩展语法

More information

DPJJX1.DOC

DPJJX1.DOC 8051 111 2K 1 2 3 ' ' 1 CPU RAM ROM / A/D D/A PC CPU 40 68 10 20 8 51 PIII 8051 2 MCS51 8051 8031 89C51 8051 8031 89C51? MCS51 INTEL INTEL 8031 8051 8751 8032 8052 8752 8051 8051 8051 MCS51 8031 8031

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63> 因 为 路 过 你 的 路, 因 为 苦 过 你 的 苦, 所 以 快 乐 着 你 的 快 乐, 追 逐 着 你 的 追 逐 内 容 简 介 本 书 根 据 2005 年 下 半 年 实 施 的 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 嵌 入 式 系 统 设 计 师 级 考 试 大 纲 精 神, 在 深 入 研 究 历 年 计 算 机 技 术 与 软

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

Microsoft Word - ~ doc

Microsoft Word - ~ doc EEPROM 功能使用方法 1 适用产品 : 1.1 SM39R16A2/ SM39R12A2/ SM39R08A2 1.2 SM39R4051/ SM39R2051 1.3 SM39R04G1/ SM39R02G1 2 EEPROM 功能概述 : 2.1 使用 code flash 仿真为 Internal EEPROM, 在程序执行时, 可将 code flash 作为 data flash 储存数据使用

More information

untitled

untitled FBC0409 V1.0 1.0 05.06.22 SIA 2005 SIA SIA SIA SIA SIA 114 86-24-23970133 HTTP://WWW.SIA.CN YANG@SIA.CN 2 ...5...5...6 PIN...6...7 1 CPU...8 2...8 4...8 5 DMA...9 7....9 8...9 9...10 A...10 B...10...11.

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 1 2 1 2 3 4 5 6 7 8 9 10 3 1 150 2 150 1 1 1.1 1.1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.4 1.4.1 CPU 1.4.2 I/O 1.4.3 I/O 1.5 1.5.1 CISC RISC 1.5.2 1.5.3 1.6 1.6.1 1.6.2 N 1.6.3 2 2.1 2.1.1 2.1.2 2.1.3

More information

Microsoft Word - AN3259C

Microsoft Word - AN3259C www.maxim-ic.com.cn 应用笔记 3259 DS31256 Envoy - 寄存器转储列程 概述本应用笔记提供了将 DS31256 的寄存器 排队程序 描述符和 FIFO RAM 的内容转储到一个文件的程序代码 这些数据在 DS31256 无法正常工作时非常关键, 为进一步的研究和调试提供了重要信息 例如, 寄存器数据经过转储后可以显示每个 DS31256 寄存器的设置 为了保证正确地设置器件,

More information

Electrical and Optical Clock Data Recovery Solutions - Data Sheet

Electrical and Optical Clock Data Recovery Solutions - Data Sheet 32 GBd N1076A 32 GBd N1077A / 64 GBd N1076B 64 GBd N1078A / 64 GBd NRZ PAM4 O/E < 100 fs RMS JSA PLL ...3...4...4...5 /...6...8...11 N1076A...12 N1076B DCA-M...13 N1077A...15 N1078A DCA-M...17...21...

More information

<4D6963726F736F667420576F7264202D2032303037C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63>

<4D6963726F736F667420576F7264202D2032303037C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63> 2007 年 普 通 高 等 学 校 招 生 全 国 统 一 考 试 ( 重 庆 卷 ) 文 综 试 卷 第 一 部 分 本 部 分 共 35 题, 每 题 4 分, 共 140 分 在 每 题 给 出 的 四 个 选 项 中, 只 有 一 项 最 符 合 题 目 的 要 求 的 读 图 1, 回 答 1-3 题 1. 某 两 洲 面 积 之 和 与 某 大 洋 面 积 十 分 接 近, 它 们 是

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

教学输入与学习者的语言输出 温晓虹 本文从三个方面探讨了语言的输入与输出的关系 首先从理论研究的角度讨 论了从语言输入到语言输出的习得过程 实验研究表明 输入的语言素材必须被学习者所接收 即使接收了的内容也并不会自动进入中介语的体系 而是需要进一步对输入语言进行 分解 归类等分析性与综合性的处理 在语言 内化 的基础上 学习者的中介语系统才能 够不断地得到重新组合 趋于目的语 另外 学习者在语言输出前和输出时需要调节

More information

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer) 1/14 IBM Rational Test RealTime IBM, 2004 7 01 50% IBM Rational Test RealTime IBM Rational Test RealTime 1. 50% IBM Rational Test RealTime IBM Rational Test RealTime 2. IBM Rational Test RealTime Test

More information