Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. a.)
  2. #include <avr/io.h>
  3.  
  4. #define TASTE PINB
  5. volatile int i,q,T;
  6. int s;
  7.  
  8. int main(void) {
  9. s = 10; // s ist die Schrittweite fuer die Tastensteuerung
  10.  
  11. T = 2000; // T ist die gesamte Periodendauer
  12. q = 1000; // q ist die aktuelle "An" Zeit
  13.  
  14. PORTC = 0b00101010; // ein Anfangsmuster
  15.  
  16. DDRC = 63; // Ausgaenge aktivieren
  17.  
  18. int q1=1000;
  19. int q2=1000;
  20.  
  21. // Beginn Hauptschleife
  22. for (;;) { // Eine Endlosschleife
  23.  
  24. //PORTC ^= 63; // Invertieren der Lampen an Port B
  25.  
  26. PORTC = 0b11;
  27.  
  28. for (i=0;i<T;i++) { // eine Periode zaehlen
  29. if (i==q1){
  30. PORTC &=~1; //n1 ^=0b11111110
  31. }
  32.  
  33. if (i==q2){
  34. PORTC &=~2; //n1 ^=0b11111110
  35. }
  36. }
  37.  
  38. if (PINB &1){
  39. if(q1 > 0 && q2 > 0){
  40. q1-=s;
  41. q2-=s;
  42. }
  43. }
  44. if (PINB &4){
  45. q1+=s;
  46. q2+=s;
  47. }
  48.  
  49. //if (TASTE & 4) q-=s; if (q<0) q=0; // Pulsbreite erniedrigen
  50. }
  51. }
  52.  
  53. --------------------------------
  54.  
  55. b.)
  56. // Program dimmer_irq_c SK
  57. #include <avr/io.h>
  58. #include <avr/interrupt.h>
  59.  
  60. // Interruptroutine fuer PWM A
  61. ISR(TIMER1_COMPA_vect) {
  62. PORTC &= ~1; // Lampe aus
  63. }
  64. ISR(TIMER1_COMPB_vect) {
  65. PORTC &= ~2; // Lampe aus
  66. }
  67. // Interruptroutine fuer Overflow
  68. ISR(TIMER1_OVF_vect) {
  69. PORTC |= 3; // Lampe wieder an
  70.  
  71. if (PINB &4){
  72.  
  73. if(OCR1A<65535-100){
  74. OCR1A += 100; // Vergleichswert erhoehen (Wozu ? :-)
  75. OCR1B += 100; // Vergleichswert erhoehen (Wozu ? :-)
  76.  
  77. }
  78. }
  79.  
  80. }
  81. // Hauptprogramm
  82. int main(void) {
  83. // Timer Initialisieren
  84. TCCR1B=(1 << CS10); // Prescaler: 1, Mode: 0 ("normal Mode")
  85. OCR1A = 32767; // Comparewert A, 50 %
  86. OCR1B = 32767; // Comparewert A, 50 %
  87. // Interrupt fuer Timer 1 compare A,und Overflow aktivieren
  88. TIMSK1 |= (1 << OCIE1A) | (1 << TOIE1) | (1 << OCIE1B);
  89. DDRC = 63; // LEDs aktivieren
  90. PORTC = 0; // Alle LEDs aus
  91. sei(); // Interrupts global aktivieren
  92. while(1) {
  93. if(PINB&1){
  94. OCR1A = 1;
  95. OCR1B = 1;
  96. }
  97. }; // Endlosschleife
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement