今天第一次调试pwm的时候 在改变占空比上折腾了会,也没看寄存器就直接开干了 后面发现占空比一直调节不下来,看寄存器后才发现 占空比调节的最高两位是TMRH控制的。

1: 怎么改变占空比

TMR29 - 28
TMR19- 18 原厂的人粗心

2:开启pwm

=========================================================================*/
#include <ny8.h>
#include "ny8_constant.h"
unsigned int  R_AIN2_DATA=0;
unsigned char R_AIN2_DATA_LB=0;    unsigned int  R_AIN3_DATA=0;
unsigned char R_AIN3_DATA_LB=0;    unsigned int  R_Quarter_VDD_DATA=0 ;
unsigned char R_Quarter_VDD_DATA_LB=0; unsigned int  D_PWM2_DUTY=0X00;#define UPDATE_REG(x)   __asm__("MOVR _" #x ",F")
//unsigned int
#define C_PWM_LB_DUTY_00H   0x00      //0x00
#define C_PWM_LB_DUTY_40H   0xA0
#define C_PWM_LB_DUTY_01H   0x01
#define C_PWM_LB_DUTY_FFH   0x01void F_AIN2_Convert(char);
void F_AIN3_Convert(char);void F_Quarter_VDD_Convert(char);
void F_wait_eoc(void);
void delay(int);void main(void)
{//----- Initial GPIO-----//1 IOSTA = C_PA0_Input;                 // Set PortA as input port//1 IOSTA = C_PA1_Input;                 // Set PortA as input port IOSTA = C_PA2_Input | C_PA3_Input ;                 // Set PortA as input port//  IOSTA = C_PA3_Input ;                    // Set PortA as input port IOSTB = C_PB1_Output;PORTA = 0xFF;                         // PortA Data Register = 0xFFPORTBbits.PB1 = 1;INTE  = 0x00;                         // INTE = 0x00//----- Initial ADC-----
//1 ADMD  = C_ADC_En | C_ADC_CH_Dis | C_ADC_PA0 ;  // Enable ADC power, Disable global ADC input channel, Select PA0 pad as ADC input (SFR "ADMD")ADMD  = C_ADC_En | C_ADC_CH_Dis | C_ADC_PA2 | C_ADC_PA3 ; // Enable ADC power, Disable global ADC input channel, Select PA0 pad as ADC input (SFR "ADMD")//----- ADC high reference voltage source select-----ADVREFH = C_Vrefh_4V;                    // ADC reference high voltage is supplied by internal 4V  (Note: ADC clock freq. must be equal or less than 1MHz)//ADVREFH = C_Vrefh_3V;                   // ADC reference high voltage is supplied by internal 3V  (Note: ADC clock freq. must be equal or less than 500KHz)//ADVREFH = C_Vrefh_2V;                 // ADC reference high voltage is supplied by internal 2V  (Note: ADC clock freq. must be equal or less than 250KHz)//----- ADC clock frequency select----------------------------    //ADR   = C_Ckl_Div1;                 // ADC clock=Fcpu/1, Clear ADIF, disable ADC interrupt //ADR    = C_Ckl_Div2;                 // ADC clock=Fcpu/2, Clear ADIF, disable ADC interrupt ADR   = C_Ckl_Div8;                        // ADC clock=Fcpu/8, Clear ADIF, disable ADC interrupt //ADR    = C_Ckl_Div16;                    // ADC clock=Fcpu/16, Clear ADIF, disable ADC interrupt    //----- ADC Sampling pulse width select-------------     ADCR  = C_Sample_1clk | C_12BIT;          // Sample pulse width=1 adc clock, ADC select 12-bit conversion ( Note: ADC clock freq. must be equal or less than 500KHz)//ADCR  = C_Sample_2clk | C_12BIT;      // Sample pulse width=2 adc clock, ADC select 12-bit conversion ( Note: ADC clock freq. must be equal or less than 1MHz)//ADCR  = C_Sample_4clk | C_12BIT;        // Sample pulse width=4 adc clock, ADC select 12-bit conversion ( Note: ADC clock freq. must be equal or less than 1.25MHz)//ADCR  = C_Sample_8clk | C_12BIT;         // Sample pulse width=8 adc clock, ADC select 12-bit conversion ( Note: ADC clock freq. must be equal or less than 2MHz)   // Initial Timer 1/2 & PWM1/2 control register      TMRH  = C_TMR2_Data_b9 | C_TMR2_Data_b8 | C_PWM2_Duty_b9 | C_PWM2_Duty_b8;TMR2  = 0xFF;                           // Move FFH to TMR2 LB register ( TMR2[9:0]=3FFH )// PWM2DUTY = C_PWM_LB_DUTY_FFH;            // Move FFH to PWM2DUTY LB register ( PWM2DUTY[9:0]=3FFH )T2CR2     = C_PS2_Dis | C_TMR2_ClkSrc_Inst;                             // Prescaler 1:1 , Timer2 clock source is instruction clockT2CR1     = C_PWM2_En | C_PWM2_Active_Hi | C_TMR2_Reload | C_TMR2_En;   // Enable PWM2 , Active_High , Non-Stop mode ,reloaded from TMR2[9:0] , enable Timer2TMRH = TMRH & 0XF3;
//--------------------------------------------------
//1 PACON = C_PA0_AIN0 | C_PA1_AIN1;       // Set AIN0(PA0) as pure ADC input for reduce power consumption (SFR "PACON")PACON = C_PA2_AIN2 | C_PA3_AIN3;        // Set AIN0(PA0) as pure ADC input for reduce power consumption (SFR "PACON") ADMDbits.GCHS = 1;                     // Enable global ADC channel    (SFR "ADMD")delay(50);                                // Delay 0.56ms(Instruction clock=4MHz/2T) for waiting ADC stable while(1){CLRWDT();                           // Clear WatchDogR_AIN2_DATA=R_AIN2_DATA_LB=R_Quarter_VDD_DATA=R_Quarter_VDD_DATA_LB=R_AIN3_DATA=R_AIN3_DATA_LB =0x00;            F_AIN2_Convert(8);                  // execute AIN0 ADC converting 8 timesR_AIN2_DATA <<= 4;                 // R_AIN0_DATA shift left 4 bitR_AIN2_DATA_LB &= 0xF0;             // Only get Bit7~4R_AIN2_DATA += R_AIN2_DATA_LB;      // R_AIN0_DATA + R_AIN0_DATA_LBR_AIN2_DATA >>=3;                    // R_AIN0_DATA divided 8F_AIN3_Convert(8);                  // execute AIN0 ADC converting 8 timesR_AIN3_DATA <<= 4;                 // R_AIN0_DATA shift left 4 bitR_AIN3_DATA_LB &= 0xF0;             // Only get Bit7~4R_AIN3_DATA += R_AIN3_DATA_LB;      // R_AIN0_DATA + R_AIN0_DATA_LBR_AIN3_DATA >>=3;                    // R_AIN0_DATA divided 8F_Quarter_VDD_Convert(8);           // execute 1/4VDD input channel ADC converting 8 timesR_Quarter_VDD_DATA <<= 4;          // R_Quarter_VDD_DATA shift left 4 bitR_Quarter_VDD_DATA_LB &= 0xF0;       // Only get Bit7~4R_Quarter_VDD_DATA += R_Quarter_VDD_DATA_LB;  R_Quarter_VDD_DATA + R_Quarter_VDD_DATA_LBR_Quarter_VDD_DATA >>=3;            // R_Quarter_VDD_DATA dividing 8TMRH = 0X04;   //设置  pwm的9-8位PWM2DUTY = R_AIN2_DATA / 4;//设置PWM的7-0位 2的10次方(pwm的值/1024) }
}//----- Sub-Routine -----
void F_AIN2_Convert(char count)
{char i;//1ADMD  = 0x90 | C_ADC_PA0;               // Select AIN0(PA0) pad as ADC inputADMD  = 0x90 | C_ADC_PA2;              // Select AIN0(PA0) pad as ADC inputfor(i=1;i<=count;i++){                ADMDbits.START = 1;                   // Start a ADC conversion sessionF_wait_eoc();                          // Wait for ADC conversion completeR_AIN2_DATA_LB += ( 0x0F & ADR); R_AIN2_DATA    += ADD; }
}void F_AIN3_Convert(char count)
{char i;//ADMD  = 0x90 | C_ADC_PA1;                // Select AIN0(PA0) pad as ADC inputADMD  = 0x90 | C_ADC_PA3;              // Select AIN0(PA0) pad as ADC inputfor(i=1;i<=count;i++){                ADMDbits.START = 1;                   // Start a ADC conversion sessionF_wait_eoc();                          // Wait for ADC conversion completeR_AIN3_DATA_LB += ( 0x0F & ADR); R_AIN3_DATA    += ADD; }
}void F_Quarter_VDD_Convert(char count)
{char i;ADMD  = 0x90 | C_Quarter_VDD;          // Select internal 1/4VDD as ADC inputfor(i=1;i<=count;i++){                  ADMDbits.START = 1;                   // Start a ADC conversion sessionF_wait_eoc();                          // Wait for ADC conversion complete R_Quarter_VDD_DATA_LB += ( 0x0F & ADR); R_Quarter_VDD_DATA    += ADD; }
}void F_wait_eoc(void)
{while(ADMDbits.EOC==0);
}void delay(int count)
{int i;for(i=1;i<=count;i++);
}

九齐单片机NY8B062D 之PWM相关推荐

  1. 九齐单片机NY8B062D开发笔记(一)准备

    九齐单片机开发笔记 前言 过程 1.芯片介绍 2.开发环境: 3.例程template 4.源文件: 参考资料 前言 各位朋友们,由于九齐的仿真器买不到,这个系列暂时停止更新 由于价格和性能的追求,近 ...

  2. 九齐单片机 NY8B062D 之TIM0的使用

    1:基础知识. (官方都提供了 整理一下是为了方便以后开发的时候查看) 2:寄存器的了解 2.1 TOMD 2.2 对于 TOMD寄存器的配置 //;------------------------- ...

  3. 九齐单片机NY8B062D单按键控制4种LED状态

    /* =========================================================================* Project: 单按键控制4种LED状态* ...

  4. 密脚九齐单片机 SSOP20 NY8BM72A 2K ROM 九齐

    NY8BM72A 是以MTP作为记忆的8bit低单价九齐单片机,有18个IO口,12+1AD通道,2K ROM,4组计时器,3组PWM,3组蜂鸣器, 系統主頻提供 20.8M/19.2M/16M/14 ...

  5. NY8B062D 九齐单片机之ADC(采样值不准的解决办法)

    其实ADC的程序 官方已经给出了 如下 ( 写这篇文章的目的是 就是本人在使用的时候 发现采样的数值 每次在接收采样值 必须要清零 要不然到处漂 ) 下面一段时间官方的程序 我就在上面加了个pwm的测 ...

  6. 九齐单片机NY8A051D程序之 PWM Output

    这个例程原本就是九齐的IDE自带的,我这里傻瓜式的操作给大家看看,另外附带他的源码,没有用的给删了,需要注意的是,这芯片C指令51单片机有那么一点点区别,PWM输出或者做那种进入低功耗的案子,都一定要 ...

  7. 九齐单片机应用-小家电开发(1)

    ** 锂电类便携式小家电应用开发-打蛋器 1:应用需求:PWM输出,复位电压2.7V,重启电机电压3.0V 2:结合需求,选用九齐系列单片机中的051F作为主控芯片,配合9017给锂电进行充电. 3: ...

  8. NY8A051F 6 I/O 8-bit EPROM-Based MCU 台湾九齐单片机

    NY8A051F 功能简介 NY8A051F 可以说是台湾九齐的人气王,有硬件PWM,有LVD,有38K红外载波,有各种模式 NY8A051F 宽广的工作电压: NY8A051F 2.0V ~ 5.5 ...

  9. 九齐单片机 NY8A051D点亮LED

    写在前面 这段时间接触九齐的051D,记录一下怎么快速入门这款单片机 定时器 跟普通的8051单片机使用方法类似,直接上代码: #include <ny8.h> #include &quo ...

最新文章

  1. Matlab R2018a 中文版安装教程(同时适用于大部分其他版本)
  2. 无法远程访问Mysql的解决方案
  3. Java-ReentrantLock初探
  4. mysql真的不能做搜索引擎吗?
  5. 游戏中的卡片模态面板设计【1】—运用案例分析
  6. pfile文件怎么恢复格式_回收站清空的文件怎么恢复?值得收藏的恢复方法
  7. com.microsoft.sqlserver.jdbc.SQLServerException: 索引 7 超出范围。
  8. Kamailio 简介
  9. ClickHouse内核分析-MergeTree的Merge和Mutation机制
  10. day39-Spring 05-Spring的AOP:不带有切点的切面
  11. java8循环_Java8里请不要再使用循环语句
  12. 安卓选择多张图片上传_微信7.0.5更新!安卓客户端领先ios发布,新增多项实用功能...
  13. c语言字符串汇编,C语言调用汇编实现字符串对换
  14. 关于Mac电脑更新IP地址的解决方法!
  15. [bzoj2594][Wc2006]水管局长数据加强版
  16. Java Lambda
  17. linux修改vcf编码格式,VCF乱码终极解决大法
  18. 跟着海盗头子创业是一种怎样的体验?
  19. 阿拉丁2021年度小程序白皮书发布,凡泰极客 FinClip 技术再度入选(内附完整白皮书下载)
  20. 【图像分割】基于计算机视觉实现视网膜图像中的血管分割附matlab代码

热门文章

  1. Spring boot 集成 ureport (三) 报表存储至数据库
  2. 3D结构光投影测量软件 / 界面 (基于QT)
  3. 工作分配问题 NOJ 1288 裸KM算法
  4. Python查找目录下最大的指定个数的文件和图片
  5. ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
  6. 汉诺塔之添加移动编号
  7. PMP考试报名费用可以怎么支付?给你说明白
  8. iOS定位和地理坐标类型解释
  9. BetaFlight模块设计之七:LEDSTRIP任务分析
  10. java rhino 下载_Java 6的内置Rhino版本和Mozilla直接提供的Rhino包有什么区别?