Advertisement
Guest User

untitled

a guest
Feb 17th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #define PB_ODR *(unsigned char*)0x5005
  2. #define PB_DDR *(unsigned char*)0x5007
  3. #define PB_CR1 *(unsigned char*)0x5008
  4. #define TIM2_CNTR *(uint16_t*)0x530C
  5. // Unsigned int is 16 bit in STM8.
  6. // So, maximum possible value is 65536.
  7.  
  8. unsigned long int dl; // Delay
  9. #include <stm8s.h>
  10.  
  11.  
  12.  
  13. void timer_init(void)
  14. {
  15.  
  16. //TIM2->CR1 |= 1<<7; //ARR buffered
  17. /**********************for example 1*******************************/
  18. //Enable the update generation so that PSC and ARR can be loaded
  19. TIM2->EGR |= 1<<0;
  20. //Timer prescaler value, PSC[3:0] =1 so Ftim2
  21. TIM2->PSCR = 1;
  22. //Timer Auto reload register value
  23. TIM2->ARRH = 0xff;
  24. TIM2->ARRL = 0xff;
  25.  
  26. TIM2->SR1 &= ~(1<<0);
  27.  
  28. TIM2->CR1 |= 1<<2; //generate update at Counter overflow/underflow
  29.  
  30. TIM2_CNTR = 30;
  31.  
  32. CLK->CCOR |= CLK_CCOR_CCOEN | CLK_CCOR_CCOSEL;
  33.  
  34. }
  35. //Using Pooling example1
  36. void delay_us(uint16_t us)
  37. {
  38. uint16_t i = us;
  39. TIM2_CNTR = 0;
  40. TIM2->CR1 |= (1<<0);
  41. while(TIM2_CNTR < i);
  42. TIM2->CR1 &= ~(1<<0);
  43. //TIM2->SR1 &= ~(1<<0); //clear flag
  44.  
  45. }
  46. void delay_ms(uint16_t ms)
  47. {
  48. uint16_t i;
  49. uint16_t milisec = ms;
  50. for(i=0; i<milisec; i++)
  51. delay_us(1000);
  52. }
  53. void delay_sec(uint16_t secs)
  54. {
  55. uint16_t i;
  56. uint16_t sec =secs;
  57. for(i=0; i<sec; i++)
  58. delay_ms(1000);
  59. }
  60. unsigned long int dl; // Delay
  61. int main()
  62. {
  63. PB_ODR = 0x00; // Turn all pins of port B to low
  64. PB_DDR |= (1 << 5)|(1<<4); // 0x00100000 PB5 is now output
  65. PB_CR1 |= (1 << 5)|(1<<4); // 0x00100000 PB5 is now pushpull
  66.  
  67. timer_init();
  68.  
  69. while(1)
  70. {
  71. PB_ODR ^= (1 << 5); // Toggle PB5 output
  72. //PB_ODR &= 1<< 4;
  73. delay_sec(1);
  74. //for (dl = 0; dl < 29000; dl++) {}
  75. }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement