1. Си / Говнокод #3048

    +149.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    #define myXPaddress 0b00000010
    //#define transmit_en PD0
    
    void avr_init(void);
    void clear_buff(unsigned char buff);
    
    volatile unsigned char bit9 = 0;
    volatile unsigned char rbyte = 0;
    volatile unsigned char pc_rbyte = 0;
    
    volatile unsigned char pc_command[17];
    volatile unsigned char xp_response[15];
    
    volatile unsigned char pc_rec_pos = 0;
    volatile unsigned char xp_rec_pos = 0;
    
    volatile unsigned char pc_rec_en = 0;
    volatile unsigned char xp_rec_en = 0;
    
    volatile unsigned char pc_buff_ready = 0;
    volatile unsigned char xp_buff_ready = 0;
    
    volatile unsigned char my_window = 0;
    volatile unsigned char ack = 0;
    
    volatile unsigned char xp_xor = 0;
    
    volatile unsigned char COMM = 0;
    
    unsigned char i;
    
    void rs485_ransmit( unsigned char data )
    {
    	while ( !( UCSR0A & (1<<UDRE0)) );
    	UCSR0B &= ~(1<<TXB80); // SET 9 BIT IN 0
    	UDR0 = data;
    }
    
    unsigned char rs485_reciv(void)
    {
    	char status,data;
    	
    	status=UCSR0A;
    	bit9 = UCSR0B;
    	data=UDR0;
    	if ( status & ( (1<<FE)|(1<<DOR)|(1<<UPE) ) )
    		return 0;
    	
    	return data;
    }
    
    unsigned char rs232_reciv( void )
    {
    	while ( !(UCSR1A & (1<<RXC1)) );
    	return UDR1;
    }
    void rs232_transmit( unsigned char data )
    {
    	while ( !( UCSR1A & (1<<UDRE1)) );
    	UDR1 = data;
    }
    
    
    ISR(USART1_RX_vect)
    {
    	pc_rbyte = rs232_reciv();
    	
    	if( pc_buff_ready == 1 && pc_rbyte == 0xFA )
    	{
    		pc_rec_en = 0;
    		rs232_transmit('B');
    		rs232_transmit('U');
    		rs232_transmit('F');
    		rs232_transmit('F');
    		rs232_transmit(' ');
    		rs232_transmit('O');
    		rs232_transmit('V');
    		rs232_transmit('F');
    		return;
    	}
    		
    	if( pc_rec_en == 1 )
    		if( pc_rbyte == 0xFF)
    		{
    			pc_rec_en = 0;
    			pc_buff_ready = 1;
    			return;
    		}
    		else
    		{
    			pc_command[pc_rec_pos] = pc_rbyte;
    			pc_rec_pos++;
    			return;
    		}

    Запостил: JovialLiX, 19 Апреля 2010

    Комментарии (1) RSS

    Добавить комментарий